laravel - 如何在 laravel 的查询中编写 if 而不破坏链和序列
问题描述
我有以下查询,我需要查询中的 if 语句,我该怎么做。以下查询获取基于制造商的产品列表。如果在此查询之后尝试 if 然后使用 get(); 但这对我不起作用
询问:
$productsFeatured = Product::select('products.low_emitting_material_prerequisite_file',
'manufacturers.phone','manufacturers.address','manufacturers.linkedin_url','manufacturers.city',
'products.specs_file','products.specs_file_url','products.low_emitting_material_credit_file',
'products.id', 'products.name', 'products.logo', 'products.manufacturer_id',
'products.division_id', 'products.section_id', 'products.website', 'divisions.name as division_name', 'divisions.code as division_code',
'sections.name as section_name', 'sections.code'
)
->whereIn('products.status', ['active'])
->where(function ($query) {
$query->where('products.low_emitting_material_prerequisite_file', '!=', '');
})
->where('users.user_type', 'manufacturer_paid')
->leftJoin('products_selected_leeds', 'products.id', '=', 'products_selected_leeds.product_id')
->leftJoin('sections', 'products.section_id', '=', 'sections.id')
->leftJoin('divisions', 'products.division_id', '=', 'divisions.id')
->join('manufacturers', 'products.manufacturer_id', '=', 'manufacturers.id')
->join('users', 'manufacturers.user_id', '=', 'users.id')
->orderBy('divisions.code', 'asc')
->orderBy('sections.code', 'asc')
->groupBy('products.id');
->get()
我想要的是
$productsFeatured = Product::select('products.low_emitting_material_prerequisite_file',
'manufacturers.phone','manufacturers.address','manufacturers.linkedin_url','manufacturers.city',
'products.specs_file','products.specs_file_url','products.low_emitting_material_credit_file',
'products.id', 'products.name', 'products.logo', 'products.manufacturer_id',
'products.division_id', 'products.section_id', 'products.website', 'divisions.name as division_name', 'divisions.code as division_code',
'sections.name as section_name', 'sections.code'
)
$productsFeatured ->whereIn('products.status', ['active'])
if($request->chps_approved == '63'){
$productsFeatured->where(function ($query) {
$query->where('products.low_emitting_material_prerequisite_file', '!=', '');
})
}
->where('users.user_type', 'manufacturer_paid')
->leftJoin('products_selected_leeds', 'products.id', '=', 'products_selected_leeds.product_id')
->leftJoin('sections', 'products.section_id', '=', 'sections.id')
->leftJoin('divisions', 'products.division_id', '=', 'divisions.id')
->join('manufacturers', 'products.manufacturer_id', '=', 'manufacturers.id')
->join('users', 'manufacturers.user_id', '=', 'users.id')
->orderBy('divisions.code', 'asc')
->orderBy('sections.code', 'asc')
->groupBy('products.id');
->get()
解决方案
你可以:
$productsFeatured ->whereIn('products.status', ['active']);
if($request->chps_approved == '63'){
$productsFeatured->where(function ($query) {
$query->where('products.low_emitting_material_prerequisite_file', '!=', '');
})
}
$productsFeatured->where('users.user_type', 'manufacturer_paid')
->leftJoin('products_selected_leeds', 'products.id', '=', 'products_selected_leeds.product_id')
->....
->get();
可链接方法只是返回原始类实例(在本例中为 $productsFeatured),然后用于调用下一个方法。
IE
$class->methodOne()->methodTwo();
等同于
$class->methodOne();
$class->methodTwo();
提供已使方法可链接的方法: PHP 方法链接?
推荐阅读
- assembly - X.86 X64 汇编器中的正确堆栈操作
- java - 从 Azure IoT 向 esp8266 发送命令
- sql - 如果列已经自己建立索引,那么创建多列索引是否有帮助?
- linux - 提高使用 ffmpeg 制作幻灯片视频的性能
- pyinstaller - pyinstaller ImportError: C extension: No module named np_datetime not built
- excel-2010 - Excel:参数太多
- database - How Do I Apply TF-IDF When I Only Have a Subset of the Total Documents?
- r - 通过匹配作为列添加的因子匹配因子级别的级别来合并两个数据框
- actionscript-3 - 从另一个 MC 内部控制源 MC 内部的帧导航
- macos - OSX:Safari 关闭后会自动重启。如何解决