我正在尝试使用SyncWithoutDetaching()更新数据透视表(active_pest),但收到“在数组上调用成员函数active_pest()的错误”消息。
这里的背景是我有8个表格:产品,害虫,活性成分(即活性成分),农作物,active_product,害虫产品,crop_product和active_pest。我的表格收集有关所选(农业化学)产品的信息-在该表格中,用户选择与该产品相关的害虫,活性物质和农作物。提交后,我现有的代码将预期的信息保存在产品表中,并且通过一组“ 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)后,我得到了相同的错误消息。无论如何,我不明白我在做什么错。
Insight表示赞赏。谢谢汤姆
答案 0 :(得分:1)
Medida = CALCULATE(sum(test_data[Percentage_By_Class]);filter(test_data;test_data[Date]=max(test_data[Date]));
ALLEXCEPT(test_data;test_data[Score]))/ CALCULATE(sum(test_data[Percentage_By_Class]);
filter(all(test_data);test_data[Date]=max(test_data[Date])))
Medida2 = CALCULATE(sum(test_data[Percentage_By_Class]);filter(test_data;test_data[Date]=max(test_data[Date]));
ALLEXCEPT(test_data;test_data[Score]))/ CALCULATE(1.3*sum(test_data[Percentage_By_Class]);
filter(all(test_data);test_data[Date]=max(test_data[Date])))
只返回数组,所以您正在尝试类似[1,2,3]-> active_pest()的事情。
确切地说。调用数组中的成员函数active_pest()。
您需要使用雄辩的实例来执行$actives = $request->get('active');
因此您可以找到这样的实例:
->active_pest()->SyncWithoutDetaching( $request->get('pest'));
这将返回您的实例集合,以为每个实例保存有害生物,您需要使用foreach进行如下迭代:
$actives = Active::whereIn('col_name', $request->get('active'))->get();