似乎Laravel上的变形表没有sync()
函数。
我有两张表avails
和questions
。 questions
是morphMany
表。我想使用sync命令,这就是我所做的:
Avail::find($id)->questions()->sync($some_ids);
这给了我以下错误:
调用未定义的方法Illuminate \ Database \ Query \ Builder :: sync()
那么有没有办法让sync
工作,或者我只是不这样做?
答案 0 :(得分:2)
morphMany
是1对多,而不是多对多关系,因此没有sync
方法。
改为使用saveMany
/ save
,反过来使用associate
。
模仿这种关系的sync
行为,你可以这样做:
$questionsOld = $avail->questions()->get();
$questionsOld->each(function ($question) {
// appropriate fields here:
// 1*
$question->FOREIGN_ID = null;
$question->FOREIGN_TYPE = null;
$question->save();
});
$questionsNew = Question::whereIn('id', $someIds)->get();
// *2
$avail->questions()->saveMany($questionsNew->getDictionary());
现在:
* 1您无法使用dissociate
并且必须明确将relation_id
和relation_type
设置为null,因为morphTo
不会覆盖此方法,所以它不会按预期工作。
* 2 getDictionary()
返回简单的模型数组,而不是集合。这需要因为saveMany
将其参数类型化为array
。