Условие 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);
}
}