如何解决为在laravel中快速加载提供功能
我分配了三个级别的类别来添加产品Primary
,Secondary
和Final
类别。添加产品时,用户可以将最终的类别ID保存在category_id字段中。现在,我要访问与Primary
类别相关的最终类别的产品。
假设我具有电子主要类别,在此之下,我具有移动设备,相机,台式机 strong>,在Secondary
类别中,我又拥有Final
类别,例如Mobile中的三星, Galaxy ,佳能,相机内的 DSLR 等。现在,我希望能够提取Primary
类别内的所有产品。
我有以下代码可供急切加载:
$electronic_accessories = "Electronic Device";
$electronic_accessories_product = Product::whereHas('productCategory',function($query)
use($electronic_accessories) {
$query->whereHas('secondaryCategory',function($query)
use($electronic_accessories) {
$query->whereHas('primaryCategory',function($query)
use($electronic_accessories){
$query->where('name',$electronic_accessories);
});
});
})
->with([
'productCategory' => function($query) use($electronic_accessories) {
$query->whereHas('secondaryCategory',function($query) use($electronic_accessories)
{
$query->whereHas('primaryCategory',function($query)
use($electronic_accessories){
$query->where('name',$electronic_accessories);
});
});
},'productCategory.secondaryCategory'=> function($query) use($electronic_accessories)
{
$query->whereHas('primaryCategory',$electronic_accessories);
});
},'productCategory.secondaryCategory.primaryCategory' =>
function($query) use($electronic_accessories) {
$query->where('name',$electronic_accessories);
}])->take(2)->get();
此代码运行良好,但是我不想每次都想从Primary
类别中获得产品时重复此代码。我想将此用作功能。我尝试在getPrimaryProduct()
模型中使用Product
创建函数,但是它说
在null上调用成员函数getPrimaryProduct()
解决方法
您必须使用范围:
public function scopePrimary($query){
return $query->whereHas('productCategory',function($query)
use($electronic_accessories) {
$query->whereHas('secondaryCategory',function($query)
use($electronic_accessories) {
$query->whereHas('primaryCategory',function($query)
use($electronic_accessories){
$query->where('name',$electronic_accessories);
});
});
})
->with([
'productCategory' => function($query) use($electronic_accessories) {
$query->whereHas('secondaryCategory',function($query) use($electronic_accessories)
{
$query->whereHas('primaryCategory',function($query)
use($electronic_accessories){
$query->where('name',$electronic_accessories);
});
});
},'productCategory.secondaryCategory'=> function($query) use($electronic_accessories)
{
$query->whereHas('primaryCategory',$electronic_accessories);
});
},'productCategory.secondaryCategory.primaryCategory' =>
function($query) use($electronic_accessories) {
$query->where('name',$electronic_accessories);
}]);
}
然后使用它:
Product::primary()->get();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。