1
0

More than 1 year has passed since last update.

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);

https://github.com/77web/doctrine-vs-eloquent/blob/0976b9026f10ba1119c0c576abbbb733d4dda8fc/Doctrine/Usecase/find_one_record.php

  • 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);

https://github.com/77web/doctrine-vs-eloquent/blob/0976b9026f10ba1119c0c576abbbb733d4dda8fc/Eloquent/Usecase/find_one_record.php

  • Bookモデルのstaticメソッドの find() にidを渡すことで、id=1のBookレコードを表すBookモデルのインスタンスが取得できます。
  • コード内で複数回 Book::find(1) を呼び出した場合、1回目に返ってくる $book1 と2回めに返ってくる $book1 は同一インスタンスではありません( === で比較するとfalseとなる)。
1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0