リポジトリでの操作
前回は$manager->find(Item::class, 3)
といったように最低限の取得にとどまりました。
今回はEntityRepository
を使って行きます。
Itemの一覧を取得
use App\Entities\Item;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
/** @var EntityManager $manager */
$manager = require 'createManager.php';
/** @var EntityRepository $repository */
$repository = $manager->getRepository(Item::class);
/** @var array<Item> $items */
$items = $repository->findAll();
foreach($items as $item)
{
echo "{$item->getId()} - {$item->getName()} : {$item->getPower()}\n";
}
1 - F : 8
2 - A : 3
3 - C : 6
4 - D : 5
5 - G : 7
6 - E : 2
7 - B : 4
まずはEntityManagerからItem
に関連付けられたEntityRepository
を取得します。
$repository = $manager->getRepository(Item::class);
EntityRepositoryを使ってItem
のエンティティをすべて取得します。
$items = $repository->findAll();
Itemテーブルから取得してきたレコードをItemエンティティに変換して取得できます。
戻り値はItemインスタンスの配列です。
この内容はSQLではこんな感じをイメージしてください。
SELECT * FROM Item;
主キーから取得
use App\Entities\Item;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
/** @var EntityManager $manager */
$manager = require 'createManager.php';
/** @var EntityRepository $repository */
$repository = $manager->getRepository(Item::class);
/** @var Item|null $item */
if($item = $repository->find(5))
{
echo "{$item->getId()} - {$item->getName()} : {$item->getPower()}\n";
}
5 - G : 7
$item = $repository->find(5)
id
が5
のItem
を取得します。
条件付きで取得
use App\Entities\Item;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
/** @var EntityManager $manager */
$manager = require 'createManager.php';
/** @var EntityRepository $repository */
$repository = $manager->getRepository(Item::class);
/** @var array<Item> $items */
$items = $repository->findBy(['name' => 'C']);
foreach($items as $item)
{
echo "{$item->getId()} - {$item->getName()} : {$item->getPower()}\n";
}
3 - C : 6
$items = $repository->findBy(['name' => 'C']);
カラム名name
がC
のItem
を取得します。
配列で返ります。
SQLだとこんな感じでしょうか。
SELECT * FROM Item WHERE Item.name = 'C';
複雑な条件付きで取得
use App\Entities\Item;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
/** @var EntityManager $manager */
$manager = require 'createManager.php';
/** @var EntityRepository $repository */
$repository = $manager->getRepository(Item::class);
/** @var array<Item> $items */
$items = $repository->findBy(
[
'name' => ['C', 'D', 'G', 'E', 'B'],
'id' => [1, 2, 3, 4, 5]
],
[
'power' => 'DESC'
]
);
foreach($items as $item)
{
echo "{$item->getId()} - {$item->getName()} : {$item->getPower()}\n";
}
5 - G : 7
3 - C : 6
4 - D : 5
この例ではname
がC,D,G,E,B
かつid
が1,2,3,4
の場合取得します。
カラムがpower
で降順で取得されます。
SQLにするとこんな感じでしょうか。
SELECT * FROM Item
WHERE id IN(1, 2, 3, 4, 5) AND name IN('C', 'D', 'G', 'E', 'B')
ORDER BY power DESC;
範囲指定して取得
use App\Entities\Item;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
/** @var EntityManager $manager */
$manager = require 'createManager.php';
/** @var EntityRepository $repository */
$repository = $manager->getRepository(Item::class);
/** @var array<Item> $items */
$items = $repository->findBy(
[ ],
null,
3,
3
);
foreach($items as $item)
{
echo "{$item->getId()} - {$item->getName()} : {$item->getPower()}\n";
}
4 - D : 5
5 - G : 7
6 - E : 2
SQL(MySQL)でいうとこんな感じ。
SELECT * FROM Item LIMIT 3, 3;
0から数えて3番目から3項目取得します。