Laravel объединить запрос с оператором if - PullRequest
0 голосов
/ 21 апреля 2020

Я работаю над фильтрацией продукта, используя AJAX. Есть ли какой-нибудь возможный способ получения того же результата, что и на рисунке ниже, с помощью построителя запросов?

Php code

Я пробовал объединение, но оно не работает.

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Я надеюсь, что этот пример дает идею, попробуйте этот

используйте несколько операторов if и получите данные в БД с помощью объединений.

function datatables($request) {
        $data = $this->leftJoin('blog_category', 'blog_category.blog_category_uuid', '=', 'blog_detail.blog_category_uuid')
                ->where('blog_detail.blog_detail_is_deleted', 'NO');

        if ($request->search['value'] != null && $request->search['value'] != '') {
            $keyword = $request->search['value'];
            $data = $data->where(function($query) use ($keyword) {
//                $query->orWhere('activity_type.activity_type_name', 'LIKE', '%' . $keyword . '%');
                $query->orWhere('blog_detail.blog_detail_title', 'LIKE', '%' . $keyword . '%');
            });
        }
        if (isset($request->order[0]['dir'])) {
            $data = $data->orderBy('blog_detail.blog_detail_id', $request->order[0]['dir']);
        } else {
            $data = $data->orderBy('blog_detail.blog_detail_created_date');
        }
        $datacount = $data->count();
        $dataArray = $data->select('blog_detail.*', 'blog_category.blog_category_name' , DB::raw('DATE_FORMAT(blog_detail.blog_detail_created_date,"%Y-%m-%d") as blog_detail_date'));
        if ($request->length == -1) {
            $dataArray = $dataArray->get();
        } else {
            $dataArray = $dataArray->skip($request->start)->take($request->length)->get();
        }
        return [$datacount, $dataArray];
    }
1 голос
/ 21 апреля 2020

В laravel вы можете создать модель для продукта, скажем, Product. Тогда запрос будет выглядеть как

$products = Product::where('product_status', '1');
if ($request->input('minimum_price') && $request->input('maximum_prize')) {
    $products = $products->whereBetween('product_prize', array($request->input('minimum_price'), $request->input('maximum_prize')));
}
if ($request->input('brand')){
    $brand_filter = implode("','", $request->input('brand'));
    $products = $products->whereIn('product_brand', $brand_filter);
}
$products = $products->get();

после выполнения $products содержит продукты после запроса.

...