10

我正在创建只有两个实体 Order 和 Shipment 的小型应用程序。

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

/**
 * @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.

如果我没记错的话,Doctrinefind方法在下划线处加入变量并将它们大写。我究竟做错了什么?

4

4 回答 4

25

我设法通过 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

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

于 2012-08-13T11:42:26.233 回答
2

这一行的问题

私人 $order_id;

用它

私人 $orderId;

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

于 2017-02-11T14:53:11.763 回答
1

您可以使用 Doctrine2 的内置关系功能,而不是手动在实体Shipment中使用订单 ID。这样,您将拥有 Doctrine 知道的关系。

$orders = $shipment->getOrders();

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

于 2012-08-13T11:23:35.453 回答
0

澄清一下,错误的原因是您需要将 Array 传递给findOneBy();

这是错误的:,->findOneByOrderId($orderId);

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

必须传递一个数组。array('order_id' => $orderId)

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

或简写['order_id'=> $orderId],只要你在 PHP >= 5.4

$orderExists  = $this->getDoctrine()
                ->getRepository('ShipBundle:Shipment')
                ->findOneBy(['order_id'=> $orderId]);
于 2018-04-11T19:07:17.223 回答