Доктрина ORM с Symfony2 - сортировка отношений ManyToMany - PullRequest
1 голос
/ 27 января 2012

У меня есть 2 лица.

Mag
Page

Которые имеют отношения ManyToMany. К странице может быть прикреплено много Mags, но мне нужно разрешить пользователю настраивать порядок сортировки Mags.

На данный момент ордер основан на id Магов в таблице Page_Mag

Так что мне нужно поле сортировки, но тогда мне нужно поле сортировки для каждого отношения Page-> Mag, так как есть много страниц, к которым может быть прикреплено любое количество Mags.

Я изо всех сил пытаюсь придумать лучший способ сделать это, не делая большой беспорядок моей схемы!

Есть идеи?

Мои аннотации:

  /**
    * @ORM\ManyToMany(targetEntity="Page", mappedBy="magazines" , cascade = {"persist", "remove"})
    */
    protected $Page;

и

/**
* @ORM\ManyToMany(targetEntity="Magazine", inversedBy="id" , cascade = {"persist", "remove"})
*/
protected $magazines;

EDIT: Чтобы попытаться объяснить лучше, вот каковы могут быть отношения, где важно поддерживать порядок журналов:

Page_id 1  -> Mag_id:4
           -> Mag_id:2
           -> Mag_id:1

Page_id 2  -> Mag_id:12
           -> Mag_id:1
           -> Mag_id:4

и т.д.

Ответы [ 2 ]

1 голос
/ 31 января 2012

Хотя это не совсем прямой ответ, именно так я решил свою проблему.Custom Twig Extension для выполнения сортировки в представлении.

public static function magorder($magazines , $order)
{
   $newMagazines = array();
   $order = explode(',', $order);

   foreach ($magazines as $magazine)
   {
        $newMagazines[array_search($magazine->getId(), $order)] = $magazine;
   }

   return $newMagazines;
}

затем вызывается в for:

{{ page.magazines|magorder(page.magorder) }}
1 голос
/ 27 января 2012

Я не знаю, как бы вы хотели отсортировать свои Mags, но вам, скорее всего, нужен MagRepository Class , который использует DQL (или SQL, если хотите) для выборки нужных вам сущностей в том порядке, в каком вы хочу. А затем используйте этот репозиторий в вашем контроллере.

EDIT:

Мне кажется, я неправильно понял ваш вопрос в первый раз.

К сожалению, получить поле в таблице соединений, в котором указана позиция страницы в журнале, невозможно, используя только аннотации. Вам нужна объединяющая сущность для того, что имеет связи «один ко многим» с вашими сущностями Page и Mag.

...