我有兩個實體通過與連接表關聯的一對多單向連接。學說查詢一對多一對多連接表中的一個實體
use Doctrine\ORM\Mapping as ORM;
/**
* @Entity(repositoryClass="FooRepository")
*/
class Foo
{
/**
* @var Collection
* @ORM\ManyToMany(targetEntity="Bar")
* @ORM\JoinTable(
* name="foo_bar",
* inverseJoinColumns={@ORM\JoinColumn(unique=true)}
*)
*/
private $bars;
/**
* @var int
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
// [...]
}
/**
* @Entity(repositoryClass="BarRepository")
*/
class Bar
{
/**
* @var int
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
// [...]
}
我想創建一個方法將使用一個Foo ID和酒吧id,這將返回一個或空Bar
對象我BarRepository
類。
其實我的課是這樣的:
use Doctrine\ORM\EntityRepository;
class BarRepository extends EntityRepository
{
/**
* Finds a single bar.
* @param int $fooId The foo identifier.
* @param int $barId The bar identifier.
* @return Bar|null
*/
public function findOneByFoo($fooId, $barId)
{
$qb = $this->createQueryBuilder('b');
$qb->innerJoin('Foo', 'f', Expr\Join::WITH, 'f.id = :fooId')
->where('b.id = :barId')
->setParameter('fooId', $fooId)
->setParameter('barId', $barId)
->getQuery()->getOneOrNullResult();
}
}
但這總是返回就算了吧ID沒有關聯到Foo對象酒吧對象。
謝謝你staskrak。但是使用BarRepository獲取Bar對象更合乎邏輯嗎? – Calcimicium
當然你是正確的Calcimicium。這只是一個錯字。我們需要從BarRepository中獲取Bar對象。 我已經改正了我的帖子。也謝謝你。 – staskrak