Есть модель Post, и две связные модели PostTag и PostImage
Я пытаюсь сохранять все это таким вот способом:
Код: Выделить всё
public function afterSave($insert)
{
// TAGS
if (!$insert) { // remove oldest tag's relations
$this->unlinkAll('tag', true);
}
$tags = array_map(
function ($val) {
return trim($val);
},
explode(',', $this->tags)
);
$tags = array_filter($tags);
if (!empty($tags)) {
foreach ($tags as $name) {
$tag = Tag::find()->where(['name' => $name])->one();
if (!$tag) {
$tag = new Tag();
$tag->name = $name;
$tag->save();
}
$this->link('tag', $tag); // Здесь возникает ошибка (но только при insert)
}
}
// IMAGES
// картинки по тому же принципу, но один ко многим
parent::afterSave($insert);
}
Которая связана с тем, что до окончания AfretSave текущая запись Post считается еще не сохраненной. И все потому, чтоUnable to link models: both models must NOT be newly created.
в ActiveRecord->insertInternal() написано вот так:
Код: Выделить всё
$this->afterSave(true);
$this->setOldAttributes($values);
https://github.com/yiisoft/yii2/issues/ ... t-24259542
А теперь собственно вопрос, где правильнее было бы сохранять связи, если этого нельзя сделать в самой модели?
Делать последовательное сохранение моделей из контроллера не хотелось бы но пока других вариантов не вижу.