Предложение Multiple Where в конструкторе запросов Laravel - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь написать запрос MySql в построителе запросов Laravel, но он возвращает все данные из таблицы. Скорее всего, предложение where не работает должным образом. Кроме того, когда я ставлю эту строку ->orWhereNull([$request->name]), то отображается ошибка. Поскольку я новичок в построителе запросов Laravel, пожалуйста, помогите мне выбраться отсюда.

MySql Query:

SELECT t.trans_date, c.cust_id, c.first_name, c.name_name, t.notes_by, t.behavioural_notes
FROM time_trans t
JOIN customers c ON t.cust_id=c.cust_id
WHERE (t.trans_date BETWEEN 'param_date' AND 'param_date')AND (c.cust_id = '10034' OR param = NULL) AND t.behavioural_notes IS NOT NULL

Построитель запросов:

$data=DB::table('time_trans as t')
            ->join('customers as c','c.cust_id','=','t.cust_id')
            ->select('t.trans_date', 'c.cust_id', 'c.first_name', 'c.name_name', 't.notes_by', 't.behavioural_notes')
            ->WhereBetween('t.trans_date', [$request->from_date, $request->to_date])
            ->WhereNotNull('t.behavioural_notes')
            ->Where('c.cust_id','=',[$request->name])
            ->orWhereNull([$request->name])
            ->get();

1 Ответ

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

Можете ли вы проверить это.

$data=DB::table('time_trans as t')
         ->join('customers as c','c.cust_id','=','t.cust_id')
        ->select('t.trans_date', 'c.cust_id', 'c.first_name', 'c.name_name', 't.notes_by', 't.behavioural_notes')
        ->where(function ($query) use ($request) {
                $query->WhereBetween('t.trans_date', [$request->from_date, $request->to_date])
                        ->WhereNotNull('t.behavioural_notes')
                         ->Where('c.cust_id','=',[$request->name]);
            })
        ->orWhereNull([$request->name])
        ->get();

Также Вам не нужно передавать массив в orWhereNull ([$ request-> name]). Он принимает имя столбца из одной строки.

Отредактировано: - Глядя на запрос Mysql исправил это

$data=DB::table('time_trans as t')
                        ->join('customers as c','c.cust_id','=','t.cust_id')
                        ->select('t.trans_date', 'c.cust_id', 'c.first_name', 'c.name_name', 't.notes_by', 't.behavioural_notes')
                        ->WhereBetween('t.trans_date', [$request->from_date, $request->to_date])
                        ->where(function ($query) use ($request) {
                            $query->Where('c.cust_id','=',[$request->name])
                                ->orWhereNull(c.cust_id)
                        })
                        ->WhereNotNull('t.behavioural_notes')
                        ->get();

Почему вы передаете $ request-> param в orWhereNull, это должно быть имя col. Может быть, отредактированный Querybuilder может помочь вам. Вы можете обновить имя столбца в orWhereNull в соответствии с вашими потребностями.

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