2012-08-13 95 views
4

我正在創建只有兩個實體的訂單和裝運的小應用程序。學說findOneBy方法不起作用

貨件實體如下:(方法去除,以保持短)

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

如果我沒看錯的,教條find方法在下劃線加入變量和利用它們。我究竟做錯了什麼?

+0

不應該是findOneById()嗎? – Cups 2012-08-13 10:40:05

+0

您是否有訂購ID的getter?由於這是一個私人財產,如果你沒有getOrderId()方法,你將無法訪問它 – 2012-08-13 10:43:00

+0

@Carlos謝謝你的迴應。我有所有的getter setter方法。我沒有發佈它們來保持簡短的問題。我在這個問題中提到過。 – Aayush 2012-08-13 10:44:35

回答

1

你可以使用Doctrine2而不是使用的訂單的ID的內在關係的能力在實體出貨手動 這樣,你將有一個關係學說是知道的。

$orders = $shipment->getOrders(); 

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

+0

感謝您的答案。但在我的實體中,我沒有兩個實體之間的關係。我需要的是使用它的order_id變量來查詢我的Shipment實體。 – Aayush 2012-08-13 11:30:37

1

問題在這一行

private $order_id;

使用它

private $orderId;

這是確定。對於db,你將擁有order_id。

+0

的確,您需要遵循Symfony和Doctrine的慣例,否則事情就不會奏效。 – user276648 2017-09-24 13:55:21