11 Stimmen

Doctrine findOneBy Methode funktioniert nicht

Ich erstelle eine kleine Anwendung mit nur zwei Entitäten, Bestellung und Versand.

Die Versand-Entität lautet wie folgt: (Methoden wurden entfernt, um sie kurz zu halten)

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

In meinem Controller versuche ich, mit der order_id abzufragen, aber meine findOneByOrderId-Methode funktioniert nicht.

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

var_dump($orderExists);     die();

Der Fehler, den ich erhalte, lautet:

Entity 'ShipBundle\Entity\Shipment' hat kein Feld 'orderId'. Daher kann 'findOneByOrderId' nicht im Repository der Entitäten aufgerufen werden.

Wenn ich mich nicht irre, verbinden die Doctrine find-Methoden die Variablen mit Unterstrichen und setzen sie groß. Was mache ich falsch?

25voto

Aayush Punkte 2990

Ich konnte das Problem mit dem Hinweis von pomaxa und der Doctrine2-Dokumentation lösen.

Der richtige Code wäre:

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

erklärt unter: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#by-simple-conditions

Vielen Dank allen für die Hilfe. Ich schätze es.

2voto

player-one Punkte 424

Sie könnten die eingebauten Beziehungsfähigkeiten von Doctrine2 nutzen, anstatt eine ID von Bestellung manuell in Ihrer Entität Sendung zu verwenden. Auf diese Weise hätten Sie eine Beziehung, von der Doctrine weiß.

$orders = $shipment->getOrders();

Schauen Sie hier: http://docs.doctrine-project.org/projects/doctrine-orm/de/2.0.x/reference/association-mapping.html

2voto

Taras Hanych Punkte 161

Problem in this line

private $order_id;

Verwenden Sie es

private $orderId;

Es ist in Ordnung. Für die Datenbank wird es order_id sein.

-2voto

luminol Punkte 409

Nur zur Klarstellung, der Grund für den Fehler war, dass Sie ein Array an findOneBy(); übergeben mussten.

Dies ist falsch: ->findOneByOrderId($orderId); in

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

Ein Array muss übergeben werden. array('order_id' => $orderId)

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

ODER KURZSCHRIFT ['order_id'=> $orderId] solange Sie in PHP >= 5.4 sind

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

(Note: HTML tags may vary in translated content)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X