Laravel 5 Красномовний де та чи в реченнях


77

я намагаюся отримати результати з таблиці з кількома реченнями where та / або.

Моє твердження SQL:

SELECT * FROM tbl
WHERE m__Id = 46
AND
t_Id = 2
AND
(Cab = 2 OR Cab = 4)

Як я можу це отримати за допомогою Laravel Eloquent?

Мій код у Laravel:

$BType = CabRes::where('m_Id', '=', '46')
                        ->where('t_Id', '=', '2')
                        ->where('Cab', '2')
                        ->orWhere('Cab', '=', '4')
                        ->get();

Відповіді:


147

Використовуючи просунуті диски :

CabRes::where('m__Id', 46)
      ->where('t_Id', 2)
      ->where(function($q) {
          $q->where('Cab', 2)
            ->orWhere('Cab', 4);
      })
      ->get();

Або, ще краще, використовуючи whereIn():

CabRes::where('m__Id', 46)
      ->where('t_Id', 2)
      ->whereIn('Cab', $cabIds)
      ->get();

Дякую, це працює :) Але як я можу це отримати за допомогою масиву для кабіни, якщо мій масив подобається: arrCab [2,4,6]
Crni

Чому це краще і звідки береться змінна $cabIds?
раарти

другий варіант найкращий
Арун Йокеш,

чи можу я попросити вас поглянути на запитання, пов’язане з таблицею Laravel, тут: stackoverflow.com/questions/52149031/… ?
Істіаке Ахмед

32

Крім того, якщо у вас є змінна,

CabRes::where('m_Id', 46)
      ->where('t_Id', 2)
      ->where(function($q) use ($variable){
          $q->where('Cab', 2)
            ->orWhere('Cab', $variable);
      })
      ->get();

Чи можете ви зв’язати, звідки у вас «використання»? Я не знайшов цього у своєму дослідженні.
natghi

6

Коли ми використовуємо множинні умови and(де) з останніми (де + чи де), умови умови більшу частину часу не вдаються. для цього ми можемо використовувати вкладену функцію where з параметрами, що передаються в неї.

$feedsql = DB::table('feeds as t1')
                   ->leftjoin('groups as t2', 't1.groups_id', '=', 't2.id')
                    ->where('t2.status', 1)
                    ->whereRaw("t1.published_on <= NOW()") 
                    >whereIn('t1.groupid', $group_ids)
                   ->where(function($q)use ($userid) {
                            $q->where('t2.contact_users_id', $userid)
                            ->orWhere('t1.users_id', $userid);
                     })
                  ->orderBy('t1.published_on', 'desc')->get();

Наведений вище запит перевіряє всі умови where, а потім нарешті перевіряє, де t2.status = 1 і (де t2.contact_users_id = '$ userid' або де t1.users_id = '$ userid')


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.