Как сохранить приоритет в отношениях «многие ко многим» с Doctrine 2.0 - PullRequest
2 голосов
/ 28 июня 2011

Моя проблема проста:

У меня есть Пользователи и Истории в отношениях многие ко многим, я хотел бы сохранить пару атрибутов в отношении UserStory:

  • Приоритет (для того, чтобы установить порядок отображения для данного пользователя)
  • Main (помечает, какой из них является основным сюжетом)

Как я могу это сделатьчто?

Допустим, у нас есть следующее:

<?php
/** @Entity */
class User
{
    // ...

    /**
     * @ManyToMany(targetEntity="Story", inversedBy="users")
     * @JoinTable(name="users_stories")
     */
    private $stories;

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

    // ...
}

/** @Entity */
class Story
{
    // ...
    /**
     * @ManyToMany(targetEntity="User", mappedBy="stories")
     */
    private $users;

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

    // ...
}
?>

1 Ответ

4 голосов
/ 28 июня 2011

Как предложил Крозин, этот вопрос является дубликатом:

В моем конкретном случае решение простое.Отношение «многие ко многим» необходимо строить вручную, а дополнительные поля необходимо добавлять вручную.Поэтому необходимо построить две взаимосвязи OneToMany.

Итак, вот мои 3 объекта и связанная мета-информация для каждого атрибута:

<?php

/**
 * @Entity
 * @Table(name="users")
 */

class User{

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

    /**
     * @OneToMany(targetEntity="UserStory", mappedBy="user")
     */
    private $user_stories;

    // ...
}


/**
 * @Entity
 * @Table(name="user_stories")
 */

class UserStory{
    /**
     * @Id
     * @Column(type="integer", name="id")
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @ManyToOne(targetEntity="User", inversedBy="user_stories")
     */
    private $user;

    /**
     * @ManyToOne(targetEntity="Story", inversedBy="user_stories")
     */
    private $stories;

    /**
     * @Column(type="integer")
     */
    private $priority;

    /**
     * @Column(type="integer")
     */
    private $priority_tmp;

    /**
     * @Column(type="integer")
     */
    private $main;

    // ...
}


/**
 * @Entity
 * @Table(name="stories")
 */

class Story
{
    /**
     * @Id
     * @Column(type="integer", name="id")
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @OneToMany(targetEntity="UserStory", mappedBy="stories")
     */
    private $user_stories;

    // ...
}
?>
...