day9の今日は複雑な条件でレコードを絞り込む書き方を見ていきます。
Doctrine
<?php
declare(strict_types=1);
use App\Entity\Book;
use Doctrine\ORM\EntityManagerInterface;
require __DIR__.'/../vendor/autoload.php';
/** @var EntityManagerInterface $entityManager */
$entityManager = require __DIR__.'/bootstrap.php';
// priceが5000円未満でタイトルがSymfonyの本のリスト
/** @var array<Book> $books1 */
$books1 = $entityManager->getRepository(Book::class)
->createQueryBuilder('b') // aliasは何を設定しても良い
->where('b.price < :max_price')
->andWhere('b.title = :title_symfony')
->setParameter('max_price', 5000)
->setParameter('title_symfony', 'Symfony')
->getQuery()
->getResult()
;
-
where()
を2回使うと1回目のwhere()
が取り消されるので、AND条件を指定するときはandWhere()
を使います。
Eloquent
<?php
declare(strict_types=1);
use App\Models\Book;
require __DIR__.'/../vendor/autoload.php';
$books1 = Book::query()
->where('price', '<', 5000)
->where('title', 'Symfony')
->get()
;
-
where()
を複数回使うとAND条件になります。 - 条件を重ねていき、最後に
get()
を呼ぶことでBookモデルのCollectionを取得できます。 -
where()
にフィルタ対象の項目名・フィルタ値だけを渡すと=
条件として扱われます。