我有这样的设置。
文档模型
document.getElementById("a211094").removeAttribute("onmouseout");
document.getElementById("a211094").removeAttribute("onmouseover");
板块模型
public function plates()
{
return $this->belongsToMany('App\Models\Plate')->withTimestamps();
}
和像这样的数据透视表
public function documents()
{
return $this->belongsToMany('App\Models\Document')->withTimestamps();
}
现在我理解这种关系的多少,这意味着我可以将许多 public function up()
{
Schema::create('document_plate', function (Blueprint $table) {
$table->integer('plate_id')->unsigned()->index();
$table->integer('document_id')->unsigned()->index();
$table->primary(['plate_id', 'document_id']);
$table->timestamps();
});
}
个id分配给许多plate
id的权利?
这是我一直在玩的东西。
document
我想要的是:当$plates = [
'plate_id_1' => 1,
'plate_id_2' => 2,
'plate_id_3' => 3,
];
$docs = [
'recipe_id' => 1,
'procedure_id' => 2,
];
// attach many docs to plates
$plate = Plate::findMany($plates);
$doc = Document::findMany($docs);
$plate->documents()->attach($doc->id);
从下拉列表中选择user
时,我希望将这些选定的文档分配给多个选定的广告素材。所以这是很多有很多板块的文档。我已经尝试并检查了文档http://laravel.com/docs/5.1/eloquent-relationships#inserting-related-models
documents
和sync
方法。
上面的代码生成错误
调用未定义的方法Illuminate \ Database \ Eloquent \ Collection :: documents()
任何想法我做错了什么?我这样做是对的吗?
答案 0 :(得分:0)
您正在尝试从整个模型集合中检索模型的关系,这将无法正常工作。我假设你发现很多方法都会根据你传入它的id数组返回一组模型。
如果要将多个印版附加到文档,请使用:
$document->plates()->attach($plate_ids);
如果您想将许多文件附在印版上:
$plates->documents()->attach($document_ids);
编辑:
在不改变代码的情况下,可能有一种更优雅的方式,但您可以执行以下操作:
$plate_filter = [
'plate_id_1' => 1,
'plate_id_2' => 2,
'plate_id_3' => 3,
];
$doc_filter = [
'recipe_id' => 1,
'procedure_id' => 2,
];
// attach many docs to plates
$plates = Plate::findMany($plate_filter);
$docs = Document::findMany($doc_filter);
// Loop over the selected plates, attach selected docs
foreach( $plates as $plate ) {
// $doc_ids = get your document id's here, use lists or something
$plate->documents()->attach($doc_ids);
}
// Loop over the selected docs, attach selected plates
foreach( $documents as $document ) {
// You already have your plate id's in your first array,
// simply use array_values to return a new array containing
// only the plate id's
$document->plates()->attach(array_values($plate_filter));
}
如果你可以将一个集合传递给attach(),这是很方便的,我不确定你是否可以,而且我无法找到任何在谷歌上这样做的人的引用。