Полный цикл в digital

Условие where QueryBuilder

При получении данных можно задавать условие на выборку. Это делается при помощи метода where().

Первый вызов всегда идёт через table() в котором указываем таблицу базы данных. Метод get() указывает на окончание запроса и выполняет его в базу данных, возвращает объект Illuminate\Support\Collection c результатами в котором каждый результат, это экземпляр класса stdClass.

Получим все посты, количество лайков у которых равно 100:

app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB

class PostController extends Controller
{
    public function show()
    {
        $posts = DB::table('posts')->where('likes', '=', 100)->get();
    }
}

Получим посты, у которых количество лайков больше 100:

app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB

class PostController extends Controller
{
    public function show()
    {
        $posts = DB::table('posts')->where('likes', '>', 100)->get();
    }
}

Получим посты, у которых количество лайков не равно 100:

app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB

class PostController extends Controller
{
    public function show()
    {
        $posts = DB::table('posts')->where('likes', '!=', 100)->get();
    }
}

Несколько условий where логическое и

В запросе можно написать несколько условий where(). В этом случае они объединятся через логическое И. Давайте посмотрим на примере:

app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB

class PostController extends Controller
{
    public function show()
    {
        $posts = DB::table('posts')
	->where('likes', '>', 10)
	->where('likes', '<', 20)
	->get();
    }
}

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

SELECT * FROM posts WHERE likes > 10 AND likes < 20

Несколько условий where логическое или

С помощью метода orWhere() можно объединять условия через логическое ИЛИ. Давайте посмотрим на примере:

app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB

class PostController extends Controller
{
    public function show()
    {
        $posts = DB::table('posts')
	->where('id', '=', 10)
	->orWhere('likes', '>', 10)
	->get();
    }
}

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

SELECT * FROM posts WHERE id = 10 OR likes > 10

Сложные условия

При выборке можно конструировать условия любой сложности. Для этого в метод orWhere() нужно параметром передать анонимную функцию, в которой будут писаться сгрупированные команды:

app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB

class PostController extends Controller
{
    public function show()
    {
        $posts = DB::table('posts')
	->where('id', '=', 3)
	->orWhere(function($query) {
	 // тут пишем сгрупированные команды
	 })
        ->get();
    }
}

Внутри функции будет доступен объект $query(), к которому можно применять методы построителя запроса:

app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB

class PostController extends Controller
{
    public function show()
    {
         $posts = DB::table('posts')
	  ->where('id', '=', 3)
	  ->orWhere(function($query) {
	  $query
          ->where('likes', '>', 10)
          ->where('likes', '<', 50);
	  })
         ->get();
    }
}

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

SELECT * FROM posts WHERE id = 3 OR (likes > 10 AND likes > 50)

Динамические условия

Можно использовать динамические условия, в которых после слова where() будет написано имя поля таблицы. Для примера давайте сделаем условие по полю id:

app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB

class PostController extends Controller
{
    public function show()
    {
        $post = DB::table('posts')
	->whereId(1)
	->get();
	dump($post);
    }
}

А теперь сделаем условие по полю slug():

app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB

class PostController extends Controller
{
    public function show()
    {
        $post = DB::table('posts')
	->whereSlug('my-page')
	->get();
	dump($post);
    }
}

Комбинации динамических условий

Можно комбинировать условия в одном методе:

app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB

class PostController extends Controller
{
    public function show()
    {
        $post = DB::table('posts')
	->whereIdAndSlug(1, 'my-page')
	->first();
	dump($post);
    }
}

Можно также объединять условия через логическое ИЛИ:

app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB

class PostController extends Controller
{
    public function show()
    {
        $post = DB::table('posts')
	->whereIdOrSlug(1, 'my-page')
	->first();
	dump($post);
    }
}
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг