有没有办法将新对象添加到hasMany关系而无需从DB中重新获取?
我的意思是如果我有一个名为public function getFiles()
{
return $this->hasMany(File::className(), ['fileListId' => 'id']);
}
public function addFile()
{
$file = new File([
'fileListId' => $this->id
]);
return $file;
}
的ActiveRecord,它具有以下关系和加法函数:
$file
尽管$fileList->files[0]
中有实际模型,但当我尝试访问$this->files[] = new File(...)
时,将再次从数据库中请求它。
Ofc,我试过做一个像newdiv.innerHTML = "Item" + (counter + 1) + " <input type='text'
placeholder='Description' maxlength='255' class='input'> <ul class='ac-
dropdown' style='display: none;'>";
这样的作业,但它不起作用,因为没有给出制定者。即使我为此添加新的setter,我真的不知道,要填写什么以使其按预期工作。
对此有何建议?
答案 0 :(得分:3)
如果您的模型有关系文件,或者甚至没有 - 你可以调用$ activeRecord-&gt; populateRelation('files',$ fileModels)
请参阅:http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#populateRelation()-detail
在你的情况下:
public function addFile()
{
$file = new File([
'fileListId' => $this->id
]);
return $file;
}
可能会成为
public function addFile()
{
$files = [];
$files[] = $file = new File([
'fileListId' => $this->id
]);
$this->populateRelation('files',$files);
return $file;
}
答案 1 :(得分:1)
您可以将关系返回的ActiveRecord数组保存在新属性(普通文件,而不是数据库字段)中,并使用新属性。
我认为这有点儿。我不知道你的用例但是(假设一个普通的web应用程序)通常在表单发布的处理完成后你应该进行重定向,这样用户就不能通过刷新页面来重新发送表单。