minishop2 связь опций и категорий(API)
Не пойму почему не отрабатывает создание связи
В консоли пишет ошибку, полез в класс, ругается на
Опция сама по себе создана.
joxi.ru/52aNMjbF4Q97KA
В базу пишет так
joxi.ru/L21pa1Qs8NGb6m
Сначала у себя столкнулся с такой проблемой, попробовал на модхосте, тоже самое.
s10452.h8.modhost.pro/manager/
s10452
pass: 5CohN1V00fp0
Подскажите пожалуйста, что не так или как лучше создавать связь?
$cat = $modx->newObject('msCategoryOption', array(
'option_id' => 1,
'category_id' => 2,
'active' => 1,
'value' => '')
);
$cat->save();
joxi.ru/823n376IJQnLVmВ консоли пишет ошибку, полез в класс, ругается на
$key = $this->getOne('Option')->get('key');
и тут я встал в ступор.Опция сама по себе создана.
joxi.ru/52aNMjbF4Q97KA
В базу пишет так
joxi.ru/L21pa1Qs8NGb6m
Сначала у себя столкнулся с такой проблемой, попробовал на модхосте, тоже самое.
s10452.h8.modhost.pro/manager/
s10452
pass: 5CohN1V00fp0
Подскажите пожалуйста, что не так или как лучше создавать связь?
Комментарии: 8
Ребят, подскажите пожалуйста, эта проблема не дает двигаться дальше в разработке…
Вроде код обычный, обычное создание объекта…
Вроде код обычный, обычное создание объекта…
Это значит, что у тебя нет объекта msOption с ID = 1.
Тестовый сайт уже отключен, потому не посмотреть.
Тестовый сайт уже отключен, потому не посмотреть.
Опция сама по себе создана.Она у меня есть, скрин приложил joxi.ru/52aNMjbF4Q97KA
на фоне видно, что она создана
Поднял на новом
s10466.h8.modhost.pro/manager/
s10466
pass: mNQrzYmrxWl2
Создал так же опцию, результат тот же
joxi.ru/eAO0K3BIxKpOWr
Попробовал еще раз, понятное дело теперь ругается на дублирующую запись, с нулевыми значениями
joxi.ru/DmB1GoyswkzGnr
joxi.ru/DmB1GoyswkzGnr
1) В объекте msCategoryOption поля option_id и category_id вместе образуют первичный ключ
2) При передаче массива вnewObject() для выставления значений вызывается метод fromArray()
3) По умолчанию fromArray() имеет третий параметр $setPrimaryKeys= false, который блокирует высталение первичных ключей
Сопоставляя пункты между собой, получаем итог: в данном примере кода значение поля option_id остается умолчательным (0), а опции с ID = 0 не существует.
Надеюсь, такого объяснения достаточно, и не требуется приводить кусок кода с правильным заполнением полей.
2) При передаче массива вnewObject() для выставления значений вызывается метод fromArray()
3) По умолчанию fromArray() имеет третий параметр $setPrimaryKeys= false, который блокирует высталение первичных ключей
Сопоставляя пункты между собой, получаем итог: в данном примере кода значение поля option_id остается умолчательным (0), а опции с ID = 0 не существует.
Надеюсь, такого объяснения достаточно, и не требуется приводить кусок кода с правильным заполнением полей.
Спасибо за конструктивное и развернутое объяснение, а так же за новые знания.
Понял, что через функцию set
Понял, что через функцию set
$cat = $modx->newObject('msCategoryOption');
$cat->set('option_id', 1);
$cat->set('category_id', 2);
$cat->set('value', '');
$cat->set('active', 1);
$cat->save();
Михали, Большое спасибо!!! сам точно бы не догадался. $cat = $modx->newObject('msCategoryOption');
$cat->fromArray(array(
'option_id' => 1,
'category_id' => 2,
'active' => 1,
'value' => ''), '', true);
echo print_r($cat->toArray(), 1);
сам точно бы не догадалсяЧтение исходников творит чудеса. Хотя помню, как с подобным пару суток просидел, пока докопался до сути.
С каждым разом убеждаюсь, что знания по модх у меня на уровне плинтуса.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.