OrderとShipmentの2つのエンティティだけで小さなアプリケーションを作成しています。
出荷エンティティは次のとおりです:(短くするために削除されたメソッド)
/**
* @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.
私が間違っていない場合、Doctrine find
メソッドはアンダースコアで変数を結合し、それらを大文字にします。何が間違っているのですか?
PomaxaとDoctrine2のドキュメントからのヒントで問題を解決することができました。
正しいコードは次のとおりです。
$orderExists = $this->getDoctrine()
->getRepository('ShipBundle:Shipment')
->findOneBy(array('order_id' => $orderId));
助けてくれてありがとう。それは有り難いです。
この行の問題
プライベート$ order_id;
これを使って
プライベート$ orderId;
大丈夫です。 dbの場合、order_idがあります。
エンティティShipmentで手動で注文のIDを使用する代わりに、Doctrine2の組み込みの関係機能を使用できます。そうすれば、関係ができますDoctrineは認識しています。
$orders = $shipment->getOrders();
ここを見てください: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/association-mapping.html
明確にするために、エラーの理由は、配列をfindOneBy();
に渡す必要があるためでした。
これは間違っています:、->findOneByOrderId($orderId);
in
_$orderExists = $this->getDoctrine()
->getRepository('ShipBundle:Shipment')
->findOneByOrderId($orderId);
_
配列を渡す必要があります。 array('order_id' => $orderId)
_$orderExists = $this->getDoctrine()
->getRepository('ShipBundle:Shipment')
->findOneBy(array('order_id' => $orderId));
_
または、PHP> = 5.4である限り、速記_['order_id'=> $orderId]
_
_$orderExists = $this->getDoctrine()
->getRepository('ShipBundle:Shipment')
->findOneBy(['order_id'=> $orderId]);
_