首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SyncWithoutDetaching()更新数据透视表时,“调用数组上的成员函数active_pest()”

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

Stack Overflow用户
提问于 2019-02-21 16:44:47
回答 1查看 28关注 0票数 1

我试图使用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数据透视表中。

我的代码是:

代码语言:javascript
复制
// 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)后得到了相同的错误消息。不管怎样,我不知道我做错了什么。

感谢您的洞察力。谢谢,汤姆

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-22 00:15:43

代码语言:javascript
复制
$actives = $request->get('active');

只需返回数组,因此您正在尝试类似于下面的1,2,3->active_pest()。

这正是它所说的。调用数组上的成员函数active_pest()。

您需要使用eloquent实例来执行->active_pest()->SyncWithoutDetaching( $request->get('pest'));

所以你可以像这样找到你的实例:

代码语言:javascript
复制
$actives = Active::whereIn('col_name', $request->get('active'))->get();

这将返回实例的集合,为了保存每个实例的有害程序,您需要使用foreach进行迭代,如下所示:

代码语言:javascript
复制
foreach($actives as $active){
    $active->active_pest()->SyncWithoutDetaching( $request->get('pest'));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54802699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档