私は自分のプロジェクトで初めてdoctrineに取り組んでいます。私は、教義の1対多の関係から返されたコレクションから正しいオブジェクトを見つけることに問題があります。Doctrineのコレクションから特定のアイテムを取得する適切な方法
私はエンティティPage
に多くのSection
サブエンティティを持っているとしましょう。
/**
* @ORM\Entity
* @ORM\Table(name="Pages")
*/
class Page
{
// bunch of properties
/**
* @ORM\OneToMany(targetEntity="Section", mappedBy="page")
* @var Collection
*/
protected $sections;
public function __construct()
{
$this->sections = new ArrayCollection();
}
/**
* @return Collection
*/
public function getSections(): Collection
{
return $this->sections;
}
}
は今、私が達成したいものを(私はおそらくname
がSection
エンティティのプロパティであることを言及する必要があります)、それの名前でSection
を取得できるようにすることです。
だから最後に、私は次のように何かを達成することができるようにしたい:
class SomeController
{
public function HomePageAction()
{
$page = $this->getEntityManager()
->getRepository('App:Entity:Page')
->findOneBy(array('name' => 'homepage'));
$section = $page->findSectionByName('header');
// rendering etc.
}
}
私はでき、もちろん、すべてのセクションと私が探している名前と一致するものを返してループ(もし例外がなければ例外をスローする)、そうする簡単な方法がないのだろうか?また、何らかのカスタムリポジトリクラスで行うべきことは何ですか、あるいはのメソッドをEntity
クラスの中に残しても構いませんか?前もって感謝します。
だから、私がこれまで試したどのような...
// class App\Entity\Page
public function getSectionByName(string $name)
{
foreach ($this->getSections() as $section) {
if ($section->getName() === $name)
return $section;
}
return null;
}
をチェックしてください。私は、「基準」の原則については知らなかった。実際には、他のユーザーにとってより便利なので、基準に関連する文書を回答に追加することを検討することができます。もう一度ありがとう! –