2016-03-02 5 views
1

У меня проблема с доступом к идентификатору модели ActiveRecord в структуре Yii2. когда я сохраняю только что созданную модель, я не могу получить поле id нового объекта.Доступ к идентификатору после сохранения модели ActiveRecord

$house = new House; 
$house->save(); 

$hid = $house->id; 

$ hid value is empty string ''.

проблема заключается в том, что я создаю новую модель, чтобы я мог передать новый идентификатор процессу потока, который обрабатывает перемещение файла, в то время как я создаю строки db. начинается поток и после json slicing и заполнения массива, первая вставка не выполняется в выражении sql condition (where).

я исследовал много ответов, и они указывают на несколько недостатков:

  1. присвоение рк - я не присвоить новое поле Идентификатор модели (БД обрабатывает рк автоинкрементного), я получаю тело $ _POST контент через json (json имеет много полей, которые не предназначены для массового назначения в основной модели, поэтому я имею дело с нарезкой json-данных до вставки $ attibutes).
  2. pk в правилах модели - у меня нет поля id в массиве правил модели.
  3. ошибка в классе ActiveRecord - я не хочу взламывать базовые классы фреймворка.

В конце кода я планировал привязать модели к отношениям, но я полагаю, что это произошло из-за этой ошибки, поэтому я также использую значение $ hid для заполнения полей внешнего ключа в связанных моделях.

помощь. Пожалуйста.

+2

Сохраняет ли 'save()' return 'true'? Попробуйте 'print_r ($ house-> errors);' после того, как будет проверена ошибка. – Alex

ответ

0

Может быть проблема проверки попробуйте таким образом

$house = new House; 
    if ($house->validate()) {  
     $house->save(); 

     $hid = $house->id; 
    } else { 

     $errors = $house->errors; 
     var_dump($errors) 
    } 

Если вы видите результат var_dump ваша проверка терпит неудачу (например: некоторые необходимые поля ..) и вам необходимо изменить соответствующие правила проверки в вашем Дом модель ..

в противном случае вы не можете попробовать с

$house->save(false); //this way the validation is not executed 

(использование экономии (ложь) только для отладки заманчивой)

0

спасибо scaisEdge и Alex. я забыл проверить не нулевые столбцы db. Модуль yii2 gii сгенерировал модель в соответствии с схемой db, и я пропустил поля правил модели. Мне не нужна проверка, так как я просто генерировал пустую строку (просто pk).

это код, который проходит:

$house = new House; 
$house->name = 'name'; [field set as required in model rules array] 
$house->description = 'description'; [field set as required in model rules array] 
$house->save(); 

$hid = $house->id; 

конвенции и конфигурацию, довольно аккуратный.

Смежные вопросы