gpt4 book ai didi

laravel - 当急切加载一个belongsToMany 关系时,如何链接->makeHidden()?

转载 作者:行者123 更新时间:2023-12-04 13:18:37 29 4
gpt4 key购买 nike

有人对如何使用有任何建议makeHidden()当急切加载时?这是我的代码:

        $work=Work::with([
'work_category'=>function($query){
$query->with(['companies'=>function($query){
$query->select('companies.id','companies.name');
}]);
},
'prices',
])
->findOrFail($id);

工作有 belongsTo('App\WorkCategory')关系,WorkCategory 有一个 belongsToMany('App\Company')通过枢轴建立关系。

如果我尝试链接 ->makeHidden('pivot')转至 $query->select('companies.id','companies.name'); - 我收到了 BadMethodCall exception: Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsToMany::makeHidden()
有什么我在这里想念的吗?

这是带有违规 makeHidden() 调用的代码

        $work=Work::with([
'work_category'=>function($query){
$query->with(['companies'=>function($query){
$query->select('companies.id','companies.name')->makeHidden('pivot');
}]);
},
'prices',
])
->findOrFail($id);


我的临时修复是添加 protected $hidden=['pivot'];到我的公司模型,但是当我需要它时能够访问枢轴会很好,并使用 $model->relation->makeHidden('attribute')在我的 Controller 中在发送之前修剪掉额外的数据。

最佳答案

不幸的是,makeHidden()不适用于 Laravel 中的关系。不直接或在相关字段上使用点符号。

您提到了我过去使用过的一种解决方案,即使用 select()仅限于您在子查询中想要的关系字段,这是一种排除数据透视的粗略方法:

$query->with(['companies'=>function($query){
$query->select('id','name', 'something', 'something');
}]);

这在字段有限时有效。但是当你有很多或正在做很多查询时,它会很痛苦。

另一种选择是做你做过的事情,并在模型上标记它 protected : protected $hidden=['pivot']; .然后,您可以灵活地使用各种方法来使用 ->makeVisible('pivot');在飞行中重新获得对这个枢轴的访问。

关于laravel - 当急切加载一个belongsToMany 关系时,如何链接->makeHidden()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57027777/

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