Laravel 5.7, продвинутый где или петля дилемма - PullRequest
0 голосов
/ 26 ноября 2018

Мне нужно произвести sql следующим образом:

...where (col1 like '%a1%' or col2 like '%a1%') and (col1 like '%a2%' or col2 like '%a2%') and ...... and (col1 like '%an%' or col2 like '%an%')

И я знаю, что для этого я могу использовать «Группировку параметров»,

->where(function ($query) {
    $query->where('col1', 'like', '%a1%')
        ->orWhere('col2', 'like', '%a1%');
})
->where(function ($query) {
    $query->where('col1', 'like', '%a2%')
        ->orWhere('col2', 'like', '%a2%');
})
......

, но как мне это зациклить?потому что параметр в является массивом json что-то вроде "[a1, a2, ..., an]",

foreach ()
{
    ->where(function ($query) {
        $query->where('col1', 'like', '%an%')
            ->orWhere('col2', 'like', '%an%');
    })
}
->get;

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вы можете сделать цикл foreach внутри замыкания, используя ваш массив (я называю это $ data), и, предполагая, что вы используете MySQL, вы можете использовать concat для объединения col1 и col2, а затем использовать необработанный запрос (Iтакже используется coalesce, если в вашей таблице есть нулевые значения).

->where(function ($query) use ($data) {
    foreach ($data as $value) {
        $query->whereRaw("concat(coalesce(`col1`, ''), ' ', coalesce(`col2`, '')) like ?", ['%'.$value.'%']);
    }
})
->get();
0 голосов
/ 26 ноября 2018

Что-то вроде этого должно работать,

$listing = Listing:where('id', $id);
foreach ($input as $key => $value) {
     $i++;
     // ->where('field_1', red_1); // Desired output
     $listing->where("where(field_{$i},".$value."_1)");
}
$results = $listing->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...