【问题标题】:Doctrine 2. How can i get only one column from table?教义 2. 我怎样才能从表格中只得到一列?
【发布时间】:2014-05-13 06:29:26
【问题描述】:

我有这个实体:

class TruckOrderPud {
/**
 * @ORM\Id     
 * @ORM\OneToOne(targetEntity="Pud")
 * @ORM\JoinColumn(name="pud_id", referencedColumnName="id", onDelete="CASCADE")
 */
protected $pudId;

/**
 * @ORM\Id
 * @ORM\OneToOne(targetEntity="TruckOrder")
 * @ORM\JoinColumn(name="truck_order_id", referencedColumnName="id", onDelete="CASCADE")
 */
protected $truckOrderId;

/**
 * @ORM\Column(name="package_count", type="integer", options={"unsigned"=true}, nullable=true)
 */
protected $packageCount;

/**
 * @ORM\Column(name="package_weight", type="integer", options={"unsigned"=true}, nullable=true)
 */
protected $packageWeight;

}

我只需要通过truckOrderId 参数从该实体获取单个列pudId。

我试试:

   $result = $this->_em->createQuery('SELECT top.pudId FROM AppTruckingBundle:TruckOrderPud top WHERE top.truckOrderId = ?1')
                    ->setParameter(1, $truckOrderId)
                    ->getSQL();`

然后我有错误:

"[Semantical Error] line 0, col 11 near 'pudId FROM AppTruckingBundle:TruckOrderPud': Error: Invalid PathExpression. Must be a StateFieldPathExpression."

如果我将查询从'SELECT top.pudId...' 更改为'SELECT top...',一切正常吗?

我也在尝试:

    $qb = $this->_em->createQueryBuilder();

    $qb->select('top.pudId')
                 ->from('AppTruckingBundle:TruckOrderPud', 'top')
                 ->where($qb->expr()->eq('top.truckOrderId', $truckOrderId));`

在这种情况下,我得到了相同的错误。如果我在$qb->select('top') 上更改$qb->select('top.pudId') 就可以了。

感谢您的帮助!

【问题讨论】:

标签: symfony doctrine-orm


【解决方案1】:

PudId 是指Pud 的外键,所以必须引用Pud。试试这个

$qb->select('IDENTITY(top.pud) PudId')
->from('AppTruckingBundle:TruckOrderPud', 'top')
->where($qb->expr()->eq('top.truckOrderId', $truckOrderId));`

【讨论】:

    【解决方案2】:

    尝试从?1 中删除1,只留下?:

       $result = $this->_em->createQuery('SELECT top.pudId FROM AppTruckingBundle:TruckOrderPud top WHERE top.truckOrderId = ?')
                        ->setParameter(1, $truckOrderId)
                        ->getSQL();
    

    Doctrine 自己进行参数定位(第一个问号点上的第一个参数)。阅读here了解详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-28
      • 2020-10-07
      • 1970-01-01
      • 2022-11-26
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多