Проблема с красноречивыми запросами в Laravel - PullRequest
0 голосов
/ 25 мая 2018

У меня есть относительно простой набор переменных, который, кажется, работает нормально, но я верю, что именно то, как я его выводил, создает проблему.

В данный момент я использую следующее в своем контроллере:

    if(empty($_GET['direction'])){
        $direction = "'LIKE', '%'";
        } else if ($_GET['direction'] === 'Inbound') {
        $direction = "'>', 1";
        } else if ($_GET['direction'] === 'Outbound'){
        $direction = "'=', 1";
    }

Теперь я указал dd'd $ direction после факта, и каждый тест показывает, что он точно выбрал правильный параметр переменной, учитывая значение $ _GET ['direction'].

Моя проблема заключается в том, как я либо выводил его туда, либо вводил результаты в следующем разделе:

$manifests = DB::table('carrier_manifests')
        ->join('customers', 'carrier_manifests.carrierOrigin', '=', 'customers.id')
        ->select('carrier_manifests.*', 'customers.customer_name')  

        ->where([
                    ['manifestNumber', 'LIKE', '%' . $manifest . '%'],
                    ['originTerminal','LIKE','%' . $terminal . '%'],
                    ['carrierOrigin', $direction],
                ])
        ->orderBy('dateUnloaded', 'DESC')
        ->whereBetween('dateUnloaded', [$startDate, $endDate])
        ->limit(100)
        ->get();

Теперь, прежде чем я продолжу, я скажу, что здесь все работает правильно и какое-то время, когда добавляются carrierOrigin и $direction, возникает проблема.

Например, если я оставлю поле direction пустым на странице, переменная $ direction будет установлена ​​равной"'LIKE', '%'".

К сожалению, в предложении where это не отправлено должным образом или что-то в этом роде, так как не возвращает результатов, но как тест, если я изменю эту строку:

['carrierOrigin', $direction],

до

['carrierOrigin','LIKE','%'],

возвращает все результаты успешно.Так есть ли другой способ форматирования вывода или отправки вывода?

1 Ответ

0 голосов
/ 25 мая 2018

Вы передаете строку как второй и третий аргументы.Используйте это в контроллере:

if(empty($_GET['direction'])){
    $direction = ['LIKE', '%'];
    } else if ($_GET['direction'] === 'Inbound') {
    $direction = ['>', 1];
    } else if ($_GET['direction'] === 'Outbound'){
    $direction = ['=', 1];
}

Затем по запросу:

$manifests = DB::table('carrier_manifests')
    ->join('customers', 'carrier_manifests.carrierOrigin', '=', 'customers.id')
    ->select('carrier_manifests.*', 'customers.customer_name')  

    ->where([
                ['manifestNumber', 'LIKE', '%' . $manifest . '%'],
                ['originTerminal','LIKE','%' . $terminal . '%'],
                ['carrierOrigin', $direction[0], $direction[1],
            ])
    ->orderBy('dateUnloaded', 'DESC')
    ->whereBetween('dateUnloaded', [$startDate, $endDate])
    ->limit(100)
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...