我试图使用SyncWithoutDetaching()来更新一个数据透视表(active_pest),但是得到了一个“调用数组上的成员函数active_pest()”的错误消息。
这里的背景是我有8个表:产品,有害生物,活性物质(即活性成分),作物,active_product,pest_product,crop_product和active_pest。我的表单收集有关所选(农化)产品的信息-在该表单中,用户选择与该产品相关的虫害、活性物质和作物。提交后,我的现有代码将在products表中保存预期的信息,并通过一组"belongsToMany“关系正确地更新active_product、pest_product和crop_product透视表。
对于任何给定的产品,通常有1或2个活动和3-8个有害生物,我希望将这些id值添加到active_pest数据透视表中。
我的代码是:
// ProductController
public function update(UpdateRequest $request)
{
$actives = $request->get('active');
$actives->active_pest()->SyncWithoutDetaching( $request->get('pest'));
...
}
// pest model
public function active_pest()
{
return $this->belongsToMany('App\Models\Pest', 'active_pest', 'active_id', 'pest_id');
}关于这种类型的错误消息的其他问题的答案表明active_pest()关系有问题-但我在那里输入错误(active_pestr)后得到了相同的错误消息。不管怎样,我不知道我做错了什么。
感谢您的洞察力。谢谢,汤姆
发布于 2019-02-22 00:15:43
$actives = $request->get('active');只需返回数组,因此您正在尝试类似于下面的1,2,3->active_pest()。
这正是它所说的。调用数组上的成员函数active_pest()。
您需要使用eloquent实例来执行->active_pest()->SyncWithoutDetaching( $request->get('pest'));
所以你可以像这样找到你的实例:
$actives = Active::whereIn('col_name', $request->get('active'))->get();这将返回实例的集合,为了保存每个实例的有害程序,您需要使用foreach进行迭代,如下所示:
foreach($actives as $active){
$active->active_pest()->SyncWithoutDetaching( $request->get('pest'));
}https://stackoverflow.com/questions/54802699
复制相似问题