Ho: due entità con M: M associazione.Doctrine Iscriviti a molti a molti senza associazione
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
}
quello che voglio: Selezionare i dati dalla tabella degli elementi (entità articolo), in cui almeno un M: esiste record di m tra elemento e ShareInfo.
Il mio suggerimento che non funziona (ho un errore semantico):
$queryBuilder
->select('i')
->from(Item::class, 'i')
->innerJoin(ShareInfo::class, 'shareInfo', 'WITH', 'shareInfo.items = i');
In puro SQL farei qualcosa di simile:
SELECT i.*
FROM items i
INNER JOIN share_info_items shareInfo
ON shareInfo.item_id = i.id
Can' Credo che non ci sia un analogo DQL per questo. L'unica soluzione che posso immaginare è quella di dividere l'associazione M: M in direzione bidirezionale
P.S. Questa domanda non ha duplicati, ho controllato bene.
Avete trovato una soluzione a questo problema? – semsem
@semsem Non ricordo di essere onesto. Ma ora userei una relazione MtM con un tavolo intermedio. Vedi https://stackoverflow.com/questions/15616157/doctrine-2-and-many-to-many-link-table-with-an-extra-field/15630665#15630665 Sembra che non ci sia una soluzione per uno- associazione direzionale. – Hast