我正在创建只有两个实体的小应用程序,订单和发货。
装运实体如下:(删除方法以保持简短)
/**
* @var integer $id
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $username
*
* @ORMColumn(name="username", type="string", length=255)
*/
private $username;
/**
* @var string $password
*
* @ORMColumn(name="password", type="string", length=255)
*/
private $password;
/**
* @var integer $order_id
*
* @ORMColumn(name="order_id", type="integer")
*/
private $order_id;
/**
* @var smallint $payment_type
*
* @ORMColumn(name="payment_type", type="smallint")
*/
private $payment_type;
在我的控制器中,我尝试使用 order_id
进行查询,但我的findOneByOrderId
方法不起作用。
$orderExists = $this->getDoctrine()
->getRepository('ShipBundle:Shipment')
->findOneByOrderId($orderId);
var_dump($orderExists); die();
我得到的错误是:
Entity 'ShipBundleEntityShipment' has no field 'orderId'. You can therefore not call 'findOneByOrderId' on the entities' repository.
如果我没记错的话,学说find
方法将变量连接在下划线处并将它们大写。我做错了什么?
我设法用 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
谢谢大家的帮助。我很感激。
您可以使用 Doctrine2 的内置关系功能,而不是在实体中使用订单 ID 手动发货这样你就会有一个教义所知道的关系。
$orders = $shipment->getOrders();
看这里: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/association-mapping.html
此行中的问题
私有 $order_ID;
使用它
私人$orderId;
还行。对于数据库,您将拥有order_id。
澄清一下,错误的原因是您需要将数组传递到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]);