day3の今日はday2で新規登録したレコードをidを指定して取得するやり方を見ていきます。
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';
// id=1のbookを取得
$book1 = $entityManager->getRepository(Book::class)->find(1);
// この書き方でも良い(shortcut)
$book1 = $entityManager->find(Book::class, 1);
- EntityManagerから
getRepository(Book::class)
によりBookエンティティ用のEntityRepositoryを取得し、EntityRepositoryのfind()
メソッドにidを渡すことでid=1のBookレコードを表すBookエンティティのインスタンスが取得できます。 - ショートカットとしてEntityManagerの
find()
メソッドにBookエンティティのFQCNとidを渡すことでもBookエンティティのインスタンスが取得できます。 - EntityManagerは、一度でも取得・保存されたエンティティのインスタンスを内部で管理していますので、↑のサンプルコードで取得した2つの
$book1
は同一インスタンスとなります(===
で比較するとtrueとなる)。
Eloquent
<?php
declare(strict_types=1);
use App\Models\Book;
require __DIR__.'/../vendor/autoload.php';
$book1 = Book::find(1);
- Bookモデルのstaticメソッドの
find()
にidを渡すことで、id=1のBookレコードを表すBookモデルのインスタンスが取得できます。 - コード内で複数回
Book::find(1)
を呼び出した場合、1回目に返ってくる$book1
と2回めに返ってくる$book1
は同一インスタンスではありません(===
で比較するとfalseとなる)。