Как использовать Query Builder в Laravel для сложных запросов SQL?

Query Builder в Laravel— это единый источник для взаимодействия с базой данных, независимо от ее SQL, sqlLite, postgresql или mongodb. Laravel позволяет Query Builder(построителю запросов) взаимодействовать с базой данных независимо от того, какую базу данных мы используем за сценой. Давайте протестируем и создадим еще несколько запросов с помощью Query Builder.

Запрос Where с Between

leads = DB::table( 'leads' )
->whereBetween( 'age', [ 20, 30 ] )
 ->get();

Запрос Where с In

$leads = DB::table( 'leads' )
->whereIn( 'state', [ 'LA', 'GA', 'AL' ] )
->get();

Запрос Where с IS NULL

$leads = DB::table('leads')
->whereNull('city')
->get();

Запрос Where с IS NOT NULL

$leads = DB::table('leads')
->whereNotNull('city')
->get();

Запрос whereRaw

Мы можем поместить необработанный SQL в качестве параметра метода whereRaw следующим образом:

$leads = DB::table('leads')
->whereRaw('city = "New York"')
->get();

Помните, что параметры метода «whereRaw» не будут экранированы, поэтому мы должны использовать этот метод очень осторожно. В противном случае это может привести к SQL-инъекции.

$leads = DB::table( 'leads' )->whereExists( function ( $query ) {
     $query->select( 'id' )
     ->from( 'meta' )
     ->whereRaw( 'meta.lead_id = leads.id' );
} )->get();

Получить значения из нескольких стобцов

Теперь мы можем использовать этот запрос для получения различных значений из некоторых столбцов нашей базы данных.

$cities = DB::table( 'leads' )
          ->select( 'city' )
          ->distinct()
	  ->get();

Упорядочить записи

Если мы хотим упорядочить наши записи по значениям в некоторых столбцах базы данных, мы можем использовать этот запрос.

$leads = DB::table( 'leads' )
		           ->orderBy( 'created_at', 'desc' )
		           ->get();
$leads = DB::table( 'leads' )
		           ->orderByDesc( 'created_at' )
		           ->get();
$leads = DB::table( 'leads' )
		           ->orderByRaw( 'leads.created_at' )
		           ->get();

Снова используйте orderByRaw() очень осторожно.

Запросы GROUP BY и HAVING

$leads = DB::table('leads')
	    ->select('city', 'state')
	    ->groupBy('city', 'state')
	     ->get();

$leads = DB::table('leads')
           ->select('age')
           ->groupBy('age')
           ->having('age', '>', 20)
           ->get();

$leads = DB::table('leads')
           ->select('age')
           ->groupBy('age')
           ->havingRaw('age > 20')
           ->get();

Использование Skip() и Take()

$leads = DB::table('leads')->skip(10)->take(5)->get();

Использование Latest() и old()

Latest() и old() просто сортируют наши записи на основе «create_at», если ни один столбец не передан, но если есть какие-либо столбцы, они сортируются на основе параметров.

$leads = DB::table('leads')->latest()->get();
$leads = DB::table('leads')->oldest()->get();

inRandomOrder()

inRandomOrder() просто возвращает записи в случайном порядке.

$leads = DB::table('leads')->inRandomOrder()->get();

Вывод

Надеемся, теперь вы понимаете все о Query Builder Laravel и о том, как он работает.