10

Order と Shipment の 2 つのエンティティだけを持つ小さなアプリケーションを作成しています。

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

エンティティで注文の ID を使用する代わりに、Doctrine2 の組み込みの関係機能を使用できます。Shipment manualそうすれば、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

明確にするために、エラーの理由は、配列を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 に答える