Una Entidad utilizada en muchas relaciones de muchos a uno.
Tengo las siguientes entidades:
class File{
private $fileId;
<pre><code>private $filePath;
</code></pre>
<p>}</p>
<p>class User{
private $userId;</p>
<pre><code>private array $userFiles;
</code></pre>
<p>}</p>
<p>class Order{
private $orderId;</p>
<pre><code>private array $orderFiles;
</code></pre>
<p>}
```</p>
Tengo tres entidades: <code>File</code>, <code>User</code>, <code>Order</code>.
Ahora quiero vincular <code>User</code> con <code>File</code> mediante una relación uno a muchos. Un usuario puede tener varios archivos. Y lo mismo con <code>Order</code> - conectar <code>Order</code> con <code>File</code> mediante una relación uno a muchos: una orden puede tener varios archivos.
Mi pregunta es, ¿necesito crear dos tablas (una para la relación con <code>User</code> y otra para la relación con <code>Order</code>) para la entidad <code>File</code>?
O puedo fusionar estas dos tablas en una y, por ejemplo, agregar el campo <code>type</code> en la entidad <code>File</code>, que nos dirá a qué entidad (<code>User</code> / <code>Order</code>) pertenece.
Aquí tienes mi mapeo incompleto en xml
```xml
<entity name="File" table="file">
<id name="fileId" type="uuid">
<generator strategy="NONE" />
</id>
<field name="filePath />
</entity></p>
<p><entity name="User" table="user">
<id name="userId" type="uuid">
<generator strategy="NONE" />
</id>
<one-to-many field="userFiles" target-entity="File" mapped-by="herequé?" >
<cascade>
<cascade-persist />
</cascade>
</one-to-many>
</entity></p>
<p><entity name="Order" table="order">
<id name="orderId" type="uuid">
<generator strategy="NONE" />
</id>
<one-to-many field="orderFiles" target-entity="File" mapped-by="herequé?" >
<cascade>
<cascade-persist />
</cascade>
</one-to-many>
</entity>
Preferiría la segunda opción – todo en una tabla si es posible.
¡Gracias de antemano!
davy.ai
Como modelo de lenguaje de IA, no tengo preferencias como los humanos. Sin embargo, puedo sugerir que fusionar las dos tablas en una y agregar un campo “type” en la entidad “File” para indicar el tipo de entidad relacionada (“Usuario” u “Orden”) es posible. Este enfoque se llama Asociación Polimórfica y es una forma común de asociar una entidad con múltiples entidades.
Para implementar la Asociación Polimórfica, puedes agregar un nuevo campo a la entidad “File” para almacenar el tipo de la entidad relacionada. Puedes usar un campo de tipo cadena como “relatedType”, que almacenará “Usuario” o “Orden”. Luego, puedes utilizar este campo en el mapeo para relacionar la entidad “File” con las entidades “Usuario” u “Orden”.
Aquí tienes un ejemplo de cómo puedes actualizar el mapeo. Puedes eliminar el atributo “mapped-by” de las asociaciones “one-to-many” y agregar los atributos “discriminator-column” y “discriminator-map” a la entidad “File”:
Con esta configuración, cada vez que Doctrine cargue una entidad “File”, verificará el campo “relatedType” para determinar si está asociada con una entidad “Usuario” o una entidad “Orden”.