minishop2 связь опций и категорий(API)

Не пойму почему не отрабатывает создание связи
$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

Подскажите пожалуйста, что не так или как лучше создавать связь?
Константин Ильин
31 июля 2017, 15:28
modx.pro
2 338
0

Комментарии: 8

Константин Ильин
01 августа 2017, 17:58
0
Ребят, подскажите пожалуйста, эта проблема не дает двигаться дальше в разработке…
Вроде код обычный, обычное создание объекта…
    Воеводский Михаил
    01 августа 2017, 18:29
    +1
    Это значит, что у тебя нет объекта msOption с ID = 1.
    Тестовый сайт уже отключен, потому не посмотреть.
      Константин Ильин
      01 августа 2017, 20:05
      0
      Опция сама по себе создана.
      Она у меня есть, скрин приложил joxi.ru/52aNMjbF4Q97KA
      на фоне видно, что она создана

      Поднял на новом
      s10466.h8.modhost.pro/manager/
      s10466
      pass: mNQrzYmrxWl2

      Создал так же опцию, результат тот же
      joxi.ru/eAO0K3BIxKpOWr
        Константин Ильин
        01 августа 2017, 20:16
        0
        Попробовал еще раз, понятное дело теперь ругается на дублирующую запись, с нулевыми значениями
        joxi.ru/DmB1GoyswkzGnr
          Воеводский Михаил
          01 августа 2017, 20:19
          +1
          1) В объекте msCategoryOption поля option_id и category_id вместе образуют первичный ключ
          2) При передаче массива вnewObject() для выставления значений вызывается метод fromArray()
          3) По умолчанию fromArray() имеет третий параметр $setPrimaryKeys= false, который блокирует высталение первичных ключей

          Сопоставляя пункты между собой, получаем итог: в данном примере кода значение поля option_id остается умолчательным (0), а опции с ID = 0 не существует.

          Надеюсь, такого объяснения достаточно, и не требуется приводить кусок кода с правильным заполнением полей.
            Константин Ильин
            01 августа 2017, 20:33
            0
            Спасибо за конструктивное и развернутое объяснение, а так же за новые знания.

            Понял, что через функцию set
            $cat = $modx->newObject('msCategoryOption');
                
            $cat->set('option_id', 1);
            $cat->set('category_id', 2);
            $cat->set('value', '');
            $cat->set('active', 1);
            
            $cat->save();
            Михали, Большое спасибо!!! сам точно бы не догадался.
              Воеводский Михаил
              01 августа 2017, 20:40
              +1
              $cat = $modx->newObject('msCategoryOption');
              $cat->fromArray(array(
                  'option_id' => 1, 
                  'category_id' => 2, 
                  'active' => 1, 
                  'value' => ''), '', true);    
              
              echo print_r($cat->toArray(), 1);
              сам точно бы не догадался
              Чтение исходников творит чудеса. Хотя помню, как с подобным пару суток просидел, пока докопался до сути.
                Константин Ильин
                01 августа 2017, 20:51
                0
                С каждым разом убеждаюсь, что знания по модх у меня на уровне плинтуса.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8