Laravel Eloquent - 关于变形关系的sync()

时间:2014-09-22 17:58:43

标签: laravel laravel-4 eloquent

似乎Laravel上的变形表没有sync()函数。

我有两张表availsquestionsquestionsmorphMany表。我想使用sync命令,这就是我所做的:

Avail::find($id)->questions()->sync($some_ids);

这给了我以下错误:

  

调用未定义的方法Illuminate \ Database \ Query \ Builder :: sync()

那么有没有办法让sync工作,或者我只是不这样做?

1 个答案:

答案 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_idrelation_type设置为null,因为morphTo不会覆盖此方法,所以它不会按预期工作。

* 2 getDictionary()返回简单的模型数组,而不是集合。这需要因为saveMany将其参数类型化为array