Kou*_*sha 5 laravel eloquent laravel-4
Laravel 上似乎没有sync()变形表的功能。
我有两张桌子avails和questions。questions是一张morphMany桌子。我想使用同步命令,这就是我所做的:
Avail::find($id)->questions()->sync($some_ids);
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
调用未定义的方法 Illuminate\Database\Query\Builder::sync()
那么有没有办法去sync上班,或者我只是做得不对?
morphMany是一对多,不是多对多关系,所以没有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());
Run Code Online (Sandbox Code Playgroud)
现在:
*1 您不能使用dissociate并且必须显式将relation_id和设置relation_type为 null,因为morphTo不会覆盖此方法,因此它不会按预期工作。
*2getDictionary()返回简单的模型数组,而不是集合。这是必需的,因为类型saveMany提示其参数为array。
| 归档时间: |
|
| 查看次数: |
8981 次 |
| 最近记录: |