使用SyncWithoutDetaching()更新数据透视表时“在数组上调用成员函数active_pest()”

时间:2019-02-21 08:44:47

标签: eloquent

我正在尝试使用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表示赞赏。谢谢汤姆

1 个答案:

答案 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();