Doctrine findOneBy方法不起作用

时间:2012-08-13 10:35:35

标签: php orm symfony doctrine-orm

我正在创建只有两个实体的小型应用程序,订单和发货。

发货实体如下:(删除方法以保持简短)

/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string $username
 *
 * @ORM\Column(name="username", type="string", length=255)
 */
private $username;

/**
 * @var string $password
 *
 * @ORM\Column(name="password", type="string", length=255)
 */
private $password;

/**
 * @var integer $order_id
 *
 * @ORM\Column(name="order_id", type="integer")
 */
private $order_id;

/**
 * @var smallint $payment_type
 *
 * @ORM\Column(name="payment_type", type="smallint")
 */
private $payment_type;

在我的控制器中,我尝试使用order_id进行查询,但我的findOneByOrderId方法无效。

$orderExists = $this->getDoctrine()
                ->getRepository('ShipBundle:Shipment')
                ->findOneByOrderId($orderId);

var_dump($orderExists);     die();

我得到的错误是:

Entity 'ShipBundle\Entity\Shipment' has no field 'orderId'. You can therefore not call 'findOneByOrderId' on the entities' repository.

如果我没有错,那么Doc​​trine find方法会加入下划线中的变量并将它们大写。我做错了什么?

4 个答案:

答案 0 :(得分:18)

我设法用pomaxa和Doctrine2文档中的提示来解决问题。

正确的代码是:

$orderExists = $this->getDoctrine()
                ->getRepository('ShipBundle:Shipment')
                ->findOneBy(array('order_id' => $orderId));

解释于:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#by-simple-conditions

感谢大家的帮助。我很感激。

答案 1 :(得分:1)

您可以使用Doctrine2的内置关系功能,而不是在您的实体发货中手动使用订单ID 这样你就可以了解Doctrine所知道的关系。

$orders = $shipment->getOrders();

请看这里:http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/association-mapping.html

答案 2 :(得分:1)

这一行的问题

  

private $ order_id;

使用它

  

private $ orderId;

没关系。对于db,您将拥有order_id。

答案 3 :(得分:0)

只是为了澄清,错误的原因是你需要将一个数组传递到findOneBy();

这是错误的:{/ 1}}

->findOneByOrderId($orderId);

必须传递数组。 $orderExists = $this->getDoctrine() ->getRepository('ShipBundle:Shipment') ->findOneByOrderId($orderId);

array('order_id' => $orderId)
只要您使用PHP> = 5.4

或SHORTHAND $orderExists = $this->getDoctrine() ->getRepository('ShipBundle:Shipment') ->findOneBy(array('order_id' => $orderId));

['order_id'=> $orderId]