[英]How to retrieve results from joined table in doctrine
我正在使用當前symfony發行版中隨附的學說在兩個表之間進行聯接。 這是我的控制器代碼:
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Acme\GearDBBundle\Entity\TbGear;
use Acme\GearDBBundle\Entity\TbDships;
class DefaultController extends Controller
{
public function indexAction()
{
$repository = $this->getDoctrine()
->getRepository('AcmeGearDBBundle:TbGear');
$query = $repository->createQueryBuilder('p')
->select('p', 'q')
->innerJoin('p.fkShip', 'q', 'WITH', 'p.fkShip = q.id')
->getQuery();
$result = $query->getResult();
foreach ( $result as $p ) {
$gear[] = array('shortname' => $p->getGearShortName(), 'name' => $p->getGearName(), 'shipname' => $p->getShipName /* Does not work, since the getter is in a different entity */);
}
return $this->render('AcmeGearDBBundle::index.html.twig', array('gear' => $gear));
}
}
由此生成的查詢是正確的,並且如果我在phpmyadmin中執行查詢,則可以提供預期的字段。
SELECT t0_.GEAR_NAME AS GEAR_NAME0, t0_.GEAR_SHORT_NAME AS GEAR_SHORT_NAME1, t0_.STATUS AS STATUS2, t0_.ID AS ID3, t1_.SHIP_NAME AS SHIP_NAME4, t1_.CONTACT_NAME AS CONTACT_NAME5, t1_.CONTACT_EMAIL AS CONTACT_EMAIL6, t1_.ID AS ID7, t0_.FK_SHIP_ID AS FK_SHIP_ID8, t0_.FK_TYPE AS FK_TYPE9
FROM tb_gear t0_
INNER JOIN tb_dships t1_ ON t0_.FK_SHIP_ID = t1_.ID
AND (t0_.FK_SHIP_ID = t1_.ID)
但是,我不知道如何訪問返回結果集中的那些字段。 我期望它的工作方式(通過訪問聯接表實體的getter)不起作用。 錯誤消息顯示為: FatalErrorException: Error: Call to undefined method Acme\\GearDBBundle\\Entity\\TbGear::getShipName() in /var/www/symfony/src/Acme/GearDBBundle/Controller/DefaultController.php line 24
中的FatalErrorException: Error: Call to undefined method Acme\\GearDBBundle\\Entity\\TbGear::getShipName() in /var/www/symfony/src/Acme/GearDBBundle/Controller/DefaultController.php line 24
TbGear實體沒有名為getShipName()
的getter方法,因為這是來自聯接實體的方法。 但是,如何訪問這些值? 這可能是一個愚蠢的問題,但我無法弄清楚。 任何幫助表示贊賞。
$p->getFkShip()->getShipName()
也許?
這應該起作用,因為它將僅檢索滿足您關系的TbGear
。 因此,您可以訪問應該只是一個的所有FkShip
(我想這是多對一的關系),然后....
當然,我想您已經正確設計了您的類,以便您可以從TbGear
中獲取一個使用FkShip
訪問該關系的FkShip
您可以添加該自定義getter: getShipName()
嗎?
public function getShipName(){
if ( $this->ship != null ){
return $this->ship->getName();
}
return null; // or an empty string
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.