相关疑难解决方法(0)

Doctrine2:在参考表中使用额外列处理多对多的最佳方法

我想知道在Doctrine2中使用多对多关系的最好,最干净,最简单的方法是什么.

让我们假设我们有一张专辑,如Metallica的Master of Puppets,有几首曲目.但请注意,一首曲目可能会出现在一张专辑中,比如Metal by Metallica的专辑 - 三张专辑都是这首曲目.

所以我需要的是专辑和曲目之间的多对多关系,使用第三个表和一些额外的列(比如指定专辑中曲目的位置).实际上,我必须使用,如Doctrine的文档所示,实现该功能的双重一对多关系.

/** @Entity() */
class Album {
    /** @Id @Column(type="integer") */
    protected $id;

    /** @Column() */
    protected $title;

    /** @OneToMany(targetEntity="AlbumTrackReference", mappedBy="album") */
    protected $tracklist;

    public function __construct() {
        $this->tracklist = new \Doctrine\Common\Collections\ArrayCollection();
    }

    public function getTitle() {
        return $this->title;
    }

    public function getTracklist() {
        return $this->tracklist->toArray();
    }
}

/** @Entity() */
class Track {
    /** @Id @Column(type="integer") */
    protected $id;

    /** @Column() */
    protected $title;

    /** …
Run Code Online (Sandbox Code Playgroud)

php orm doctrine model doctrine-orm

276
推荐指数
7
解决办法
10万
查看次数

教条加入许多与许多没有关联

我有:两个具有非定向M:M关联的实体.

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
}
Run Code Online (Sandbox Code Playgroud)

我想要的: 从items表(Item实体)中选择数据,其中Item和ShareInfo之间至少存在一个M:M记录.

我的建议不起作用(我有语义错误):

$queryBuilder
    ->select('i')
    ->from(Item::class, 'i')
    ->innerJoin(ShareInfo::class, 'shareInfo', 'WITH', 'shareInfo.items = i');
Run Code Online (Sandbox Code Playgroud)

在纯SQL中我会做这样的事情:

SELECT i.*
FROM items i
INNER JOIN share_info_items shareInfo
    ON shareInfo.item_id = i.id
Run Code Online (Sandbox Code Playgroud)

不能相信没有DQL模拟.我能想象的唯一解决方案是将非定向M:M关联分成双向

PS这个问题没有重复,我检查得很好.

php many-to-many join symfony doctrine-orm

6
推荐指数
1
解决办法
1012
查看次数

如何在symfony2中实现带有多余字段的多对多?

我有“客户”,“产品”和“版本”表。每个客户可以有多个产品,每个产品有多个版本。我创建了多对多关系“ customers_products”,并且一切正常。

我还创建了“产品”和“版本”之间的一对多关系。

问题:如何在“ customers_products”表中添加额外的列(version_id),以便我可以建立表单,用户可以在其中选择产品和版本以创建新客户。

php symfony doctrine-orm

4
推荐指数
1
解决办法
5738
查看次数

如何在 Doctrine2 中的连接表中添加额外的列?

我想创建一个通知系统。有一个Notification班级。一条通知可以分配给多个用户,而不仅仅是一个。

有一个联合表user_notifications,有两列:user_idnotification_id

$notifications用户类中的定义是这样的:

/**
 * @ManyToMany(targetEntity="Notification")
 * @JoinTable(name="user_notifications",
 *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="notification_id", referencedColumnName="id", unique=true)}
 *      )
 **/
private $notifications;
Run Code Online (Sandbox Code Playgroud)

一切正常。但我想在表中添加一个新列user_notifications,无论给定用户是否读取通知,我都想在该表中存储该新列。我应该如何在 Doctrine2 中管理它?

php doctrine symfony doctrine-orm

3
推荐指数
1
解决办法
1599
查看次数

在 Doctrine 中创建多对多关系的最佳实践。

我正在实现一个包含两个实体的系统:产品和类别。我想在这两个实体之间创建多对多关系,但我不想在 Doctrine 中使用多对多选项。我希望能够自己创建中间表(产品类别),以便以后我也可以访问该表。我应该如何定义这三个表之间的关系?(考虑到我的项目中产品和类别之间的关系是多对多的)。带有学说 ORM 注释的简单演示示例非常受欢迎,所以我不会弄错。非常感谢。最佳实践是什么?

orm doctrine symfony

3
推荐指数
1
解决办法
538
查看次数

标签 统计

doctrine-orm ×4

php ×4

symfony ×4

doctrine ×3

orm ×2

join ×1

many-to-many ×1

model ×1