Doctrine 2: ManyToMany и сортировка

scorpion-ds

Новичок
Подскажите, можно ли для связи ManyToMany устанавливать сортировку связей?

Сейчас связь такая (в данном случае это категория):
PHP:
/**
    * @ORM\ManyToMany(targetEntity="CS\EShopBundle\Entity\Property")
    * @ORM\JoinTable(name="cs_eshop_category_to_property",
    *  joinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")},
    *  inverseJoinColumns={@ORM\JoinColumn(name="property_id", referencedColumnName="id")}
    * )
    */
    private $properties;
Можно конечно сделать добавив еще одну сущность, но просто ради индекса сортировки делать этого не хотелось бы.
 

scorpion-ds

Новичок
Согласно указанному мною кода, для связи многие ко многим будет создана таблица, где указываются параметры category_id и property_id, сортировать там не почему, а я имел ввиду сортировку именно для связи к примеру в рамках одной "category_id".
 

hell0w0rd

Продвинутый новичок
Я не понимаю, что ты хочешь. Тебя не должно волновать, как это выглядит в базе, как минимум на уровне мэппинга.
Что за запросы ты хочешь получить?
 

scorpion-ds

Новичок
Есть "Категории" и "Свойства", также таблица "Продукция" и "Продукция-Свойство: значение (+ position для сортировки свойств в рамках товара)", по сути связь товар-свойство-значение не использует сущность "категории" и там привязывать свойства и их сортировку необходимо исключительно для авто-наполнения товара пустыми свойствами при его создании и первой привязке к товару.

Выше указанная связь ManyToMany обеспечивает привязку свойство к категориям, но без возможности сортировки в рамках связи "категория-свойство", так как таблица "cs_eshop_category_to_property" создается "скрытно" без своей модели и содержит всего два столбца "category_id" и "property_id".

На данный момент я установил сортировку по полю position в таблице "Свойства", но такая сортировка будет одинаковой для всех категорий, а хотелось бы иметь возможность делать это персонально для каждой категории.

P.S.: По большей степени меня уже устраивает текущие решение, но все равно интересно возможно ли такое сделать?
 

scorpion-ds

Новичок
Значит нельзя сделать, в моем случае целевой сущности не существует, а инфу по ссылке читал, но предполагал, что возможно, есть какая-то не задокументированная возможность.
 

hell0w0rd

Продвинутый новичок
Лично я так и не понял чего ты хочешь, так что возможно и есть какая-то возможность, но ты не можешь толком объяснить, что тебе нужно.
 

scorpion-ds

Новичок
Таблица cs_eshop_category_to_property содержит поля "category_id" и "property_id", которые обеспечивают связь категорий и свойств. Допустим мне надо получить все свойства привязанные к категории:

Код:
SELECT p.title FROM cs_eshop_category_to_property AS cp JOIN property AS p ON(cp.property_id = p.id) JOIN category AS c ON(cp.category_id = c.id)  WHERE cs_eshop_category_to_property.category_id = 5;
Таким образом я получу все свойства связанные с категорий №5 в произвольном порядке.

Что бы сейчас обеспечить хоть какой-то вариант сортировки, я делаю так:
Код:
SELECT p.title FROM cs_eshop_category_to_property AS cp JOIN property AS p ON(cp.property_id = p.id) JOIN category AS c ON(cp.category_id = c.id)  WHERE cs_eshop_category_to_property.category_id = 5 ORDER BY c.position;
В итоге получаю сортировку по полю position из таблицы category, такая сортировка будет одинаковой для всех категорий.

Для сортировки для каждой категории отдельно запрос стоило бы сделать так:
Код:
SELECT p.title FROM cs_eshop_category_to_property AS cp JOIN property AS p ON(cp.property_id = p.id) JOIN category AS c ON(cp.category_id = c.id)  WHERE cs_eshop_category_to_property.category_id = 5 ORDER BY cp.position;
Но в таблице "cs_eshop_category_to_property" нет поля position и так как эта таблица не имеет свой сущности, я не знаю как его туда добавить и возможно ли вообще.

P.S.: Ну как-то так, не знаю как бы еще объяснить полет своих мыслей.
 

hell0w0rd

Продвинутый новичок
ну и чего ты от доктрины тогда хочешь? у тебя 3 запрос не выполнится, тк сам говоришь, что нет поля position в cs_eshop_category_to_property
Ты связываешь Category с Property как manyToMany, значит ты можешь сортировать по любому свойству из Property.
 

fixxxer

К.О.
Партнер клуба
ORM головного мозга, блин. Что мешает делать ORDER BY cp.category_id, c.position (или в рамках чего там надо)?
 

scorpion-ds

Новичок
fixxxer, не понял идеи, судя по "ORDER BY cp.category_id, c.position" сортировка все равно будет одинаковой для всех категорий.

hell0w0rd, это понятно, но я хотел избежать добавления новой сущности только ради сортировки и решил ее не делать, так как вполне хватит одинаковой сортировки для всех категорий (напоминаю, что она будет использоваться только при первичном наполнении товаров свойствами и выводе фильтров (если свойства ими являются) на фронт-енд), потом свойства можно будет отсортировать уже для каждого товара отдельно.
 
Сверху