Wie erhalte ich eine ID, ohne Doktrin2 beizutreten?

Lesezeit: 2 Minuten

Ich habe eine Entität wie diese:

/**
 *
 * @Table(name="table")
 * @Entity
 */
 class Table {

    /**
     * @Column(type="integer")
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
     private $id;


    /**
     * @ManyToOne(targetEntity="Entities\Users")
     * @joinColumn(name="userId", referencedColumnName="id")
     */
     private $User;


    /**
     * @Column(type="string")
     */
     private $text;


}

Wenn ich mache
$q->getQuery()->getSingleResult()->getUser()->getUserId()

Doktrin generiert eine Abfrage wie:

SELECT * FROM table t INNER JOIN users u ON u.id = t.userId WHERE id = 100

aber wenn ich keine Tabellenbenutzer brauche, wie bekomme ich eine Benutzer-ID?

In reinem SQL kann ich nur

SELECT * FROM table WHERE id = 100

und holen Sie sich die Benutzer-ID ohne Join-Benutzertabelle.

Vielleicht möchten Sie sich auch die Funktion IDENTITY() ansehen (Doctrine Version >2.2).

Beispiel:

SELECT IDENTITY(t.User) AS user_id from Table

Sollte zurückkommen:

[ ['user_id' => 1], ['user_id' => 2], ... ]

Siehe auch:
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#dql-functions

Benutzer-Avatar
Megaentwicklung

Versuche dies:

$q = $qb->getQuery();
$q->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true);

Gemäß der Dokumentation sollten D2-Entitäten den Fremdschlüssel niemals offenlegen müssen, da dies alles intern durch die Zuordnungsinformationen erfolgt. Wie Sie jedoch herausgefunden haben, besteht ab und zu die Notwendigkeit, diesen Wert zu haben. Geben Sie dazu einfach die Zuordnungsinformationen für den Fremdschlüssel an.

Ich kenne Doktrin2 nicht, aber nach dem, was ich gelesen habe, ist dies ein ORM. Ich würde also vorschlagen, dass Sie eine Form des verzögerten Ladens benötigen, bei der der Benutzer nicht geladen wird. Dieser Artikel schlägt vor, dass Lazy Loading in Doktrin2 verfügbar ist.

Dies kann zu mehreren db-Aufrufen führen, wenn der Benutzer später für die zurückgegebene Tabelle verwendet wird. Das muss man abwägen mit der Idee, die Daten auf einen Schlag zu ergattern.

1130690cookie-checkWie erhalte ich eine ID, ohne Doktrin2 beizutreten?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy