gpt4 book ai didi

Laravel Eloquent - Morph 关系上的sync()

转载 作者:行者123 更新时间:2023-12-02 10:02:22 25 4
gpt4 key购买 nike

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

我有两个表availsquestionsquestions 是一个 morphMany 表。我想使用同步命令,这就是我所做的:

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

这给了我以下错误:

Call to undefined method Illuminate\Database\Query\Builder::sync()

那么有没有办法让sync正常工作,还是我做得不对?

最佳答案

morphMany 是一对多,而不是多对多关系,因此没有 sync 方法。

使用 saveMany/save 代替,associate 则相反。

<小时/>

要模仿这种关系的同步行为,您可以这样做:

$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

关于Laravel Eloquent - Morph 关系上的sync(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25980308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com