Yii2在运行时将模型添加到hasMany关系

时间:2018-01-10 07:31:21

标签: php yii2

有没有办法将新对象添加到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,我真的不知道,要填写什么以使其按预期工作。

对此有何建议?

2 个答案:

答案 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应用程序)通常在表单发布的处理完成后你应该进行重定向,这样用户就不能通过刷新页面来重新发送表单。