Ich habe: zwei Einheiten mit unidirektionaler M: M-Zuordnung.Doktrin Join Viele zu viele ohne Assoziation
class ShareInfo
{
// ...
/**
* @ORM\ManyToMany(targetEntity="Item")
* @ORM\JoinTable(name="share_info_items",
* joinColumns={@ORM\JoinColumn(name="share_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="item_id", referencedColumnName="id")})
*
* @var Item[]
*/
private $items;
}
class Item
{
// ...
// This entity has no association with ShareInfo,
// because M:M is undirectional and defined in ShareInfo entity
}
Was ich will: Wählen Sie Daten aus den Gegenständen Tabelle (Punkt Einheit), wobei mindestens ein M: M Bilanz zwischen Artikel und ShareInfo existiert.
Mein Vorschlag, die nicht funktioniert (ich habe einen semantischen Fehler bekam):
$queryBuilder
->select('i')
->from(Item::class, 'i')
->innerJoin(ShareInfo::class, 'shareInfo', 'WITH', 'shareInfo.items = i');
In reinen SQL ich so etwas tun würde:
SELECT i.*
FROM items i
INNER JOIN share_info_items shareInfo
ON shareInfo.item_id = i.id
Can‘ Ich glaube, dafür gibt es kein DQL-Analog. Die einzige Lösung, die ich mir vorstellen kann, ist das Aufteilen der unidirektionalen M: M-Assoziation in bidirektionale
P.S. Diese Frage hat keine Duplikate, habe ich gut überprüft.
Haben Sie eine Lösung für dieses Problem gefunden? – semsem
@semsem Ich erinnere mich nicht, um ehrlich zu sein. Aber jetzt würde ich eine MtM-Beziehung mit einer Zwischentabelle verwenden. Siehe https://StackOverflow.com/questions/15616157/doctrine-2-and-many-to-many-link-table-with-an-extra-field/15630665#15630665 Sieht aus wie es keine Lösung für one- gibt gerichtete Assoziation. – Hast