Как я могу написать, если в запросе в Laravel без разрыва цепи и последовательности - PullRequest
0 голосов
/ 18 июня 2019

У меня есть следующий запрос, мне нужно, если заявление в запросе, как я могу это сделать.следующий запрос получает список продуктов на основе производителей.Если попытаться, если после этого запроса, а затем использовать 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()

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Вы должны использовать условные предложения .

С помощью этого метода вы можете написать:

// ...
$productsFeatured ->whereIn('products.status', ['active'])
    ->when($request->chps_approved ==  '63', function ($query) {
        return $query->where('products.low_emitting_material_prerequisite_file', '!=', '');
    })
    ->where('users.user_type', 'manufacturer_paid')
 // continue to chain methods for the query...
0 голосов
/ 18 июня 2019

Вы можете просто:

$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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...