В yii как я могу гарантировать, что мое дочернее отношение HAS_ONE всегда создается вместе с родительской моделью

#php #activerecord #yii

#php #activerecord #yii

Вопрос:

У меня есть 2 модели AR Yii. Модели ParentRecord и ChildRecord.

Родительский элемент имеет дочерний элемент HAS_ONE.

При создании нового родительского элемента, как я могу гарантировать, что дочерний элемент также всегда создается. Родителю всегда нужен дочерний элемент.

было бы так же просто, как сделать это в родительском классе AR?

 public function onAfterConstruct()
{
    if ($this->isNewRecord){
        $this->master = new ChildRecord;
    }
}
  

Я не хочу создавать оба в контроллере и сохранять их там, я хочу только создавать и сохранять только родительский элемент, и всегда создавать и сохранять дочерний элемент.

У меня есть массив relations(), который работает нормально.

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

1. вы нашли то, что искали?

Ответ №1:

просто создайте дочернюю запись после успешного сохранения нового родительского элемента

 public function afterSave()
{
    if($this->isNewRecord)
    {
        $child = new ChildRecord;
        $child->parent_id = $this->id;
        $child->save();
    }

   return parent::afterSave();
}
  

ОБНОВЛЕНИЕ вы можете использовать отношение

 public function afterSave()
{
    if($this->isNewRecord)
    {
        $this->childRelation = new ChildRecord;
        $this->childRelation->parent_id = $this->id;
        $this->childRelation->save();
    }

   return parent::afterSave();
}
  

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

1. как это доступно после создания нового родительского элемента, но еще не сохраняет его? Я хотел бы взаимодействовать с отношением перед сохранением.

2. в родительской модели вы можете использовать эту функцию, то же самое касается отношений