我試圖加載傳遞一個參數,以一個外鍵這是inverse side
Symfony2的學說傳遞參數外鍵在findBy功能
實體我有這樣的兩個實體
廣告
/**
* Ad
*
* @ORM\Table(name="Ad")
* @ORM\Entity(repositoryClass="Symarket\MarketBundle\Repository\AdRepository")
*/
class Ad
{
/**
* @var AdImage
*
* @ORM\OneToMany(targetEntity="AdImage", mappedBy="ad", cascade={"persist", "merge"})
*/
private $images;
//...
}
AdImage
/**
* AdImage
*
* @ORM\Table(name="AdImage")
* @ORM\Entity(repositoryClass="Symarket\MarketBundle\Repository\AdImageRepository")
*/
class AdImage {
/**
* @var boolean
*
* @ORM\Column(name="adi_is_visible", type="boolean")
*/
protected $isVisible;
/**
* @var Ad
*
* @ORM\ManyToOne(targetEntity="Ad", inversedBy="images", cascade={"persist"})
* @ORM\JoinColumn(name="adi_ad_id", referencedColumnName="ad_id")
*/
protected $ad;
}
現在,通過獲取Ad
從數據庫中,我只想得到的圖像是"isVisibile" => true
這是怎麼可能與queryBuilder?
我試過至今所findBy功能是本
public function findById($adId) {
$res = $this->findBy(array("id" => $adId, "isVisible" => true, "images" => array("isVisible" => true)));
$ad = reset($res);
return $ad;
}
,我得到這個錯誤 您不能搜索的關聯字段「Symarket \ MarketBundle \實體\廣告#圖像」,因爲它是關聯的反面。查找方法僅適用於擁有邊關聯。
那我就這樣與QueryBuilder的
public function findById($adId) {
$res = $query = $this->createQueryBuilder('ad')
->leftJoin('ad.images', 'img')
->where('img.isVisible = :adVisible')
->andWhere('ad.id = :id')
->setParameter('adId', $adId)
->setParameter('imgVisible', true)
->getQuery();
$ad = reset($res);
return $ad;
}
,我也得到NULL
在此先感謝。
您可以發佈與QueryBuilder的你試圖查詢? – Peter
編輯,問你是否需要更多的東西 – ponciste
我不知道你爲什麼在查詢結果中使用'reset()'。如果你想得到一個單一的結果,你應該試試'getSingleResult()'或'getOneOrNullResult()'。如果你只想要產生多個查詢的第一個結果,你應該使用'getResult()'並且處理只使用控制器中第一個的邏輯。請參閱[Doctrine文檔](http://docs.doctrine-project.org/en/2.1/reference/dql-doctrine-query-language.html#query-result-formats) – Peter