Intereting Posts
Необходимое поле (ы) отсутствует результат Как загружать ресурсы сайта независимо от пути родительского файла Показать несколько видов в одной функции в Laravel удалите определенные строки между двумя символами в файле .txt (php) Зачем использовать фреймворки? Убедите меня, что я должен выяснить Zend Framework и использовать его PHP не может определить, вошел ли пользователь в систему или нет. php – Шанс выигрыша Facebook FQL. Какой самый простой способ получить все изменения страницы в одном запросе, упорядоченном по дате / времени? Как интегрировать PayPal с Zend Framework Преобразование числа в слова в индийском валютном формате с величиной паи Доктрина: расширение класса сущностей Проверка наличия содержимого $ _REQUEST в виде int Azure window sever не может загружать файл с php Создайте механизм для передачи положительного целого числа и отобразите все значения серии Фибоначчи до и включите указанное значение Расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO

Доктрина / Symfony – Несколько отношений один-ко-многим на одной модели

Вот выдержка из схемы, которую я действительно имею

Software: columns: title: type: string(255) id_publisher: type: integer id_developper: type: integer Company: columns: name: type: string(255) nationality: type: string(255) 

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

Сначала я попробовал что-то вроде приведенного ниже в моей модели программного обеспечения, но отношение работает только для первого локального ссылочного идентификатора_пользователя.

 relations: Company: type: one foreignType: many local: [id_publisher, id_developper] foreign: id 

Затем я попробовал это (всегда на модели программного обеспечения):

 relations: Publisher: class: Company type: one foreignType: many local: id_publisher foreign: id Developper: class: Company type: one foreignType: many local: id_developper foreign: id 

Но когда я выполняю запрос, который подсчитывает количество программ, связанных с компанией …

 public function findAllQuery(Doctrine_Query $q = null) { $q = Doctrine_Query::create() ->select('c.*, COUNT(s.id) AS count_software') ->from('Company c') ->leftJoin('c.Software s') ->groupBy('c.id'); return $q; } 

… в предложении COUNT учитываются только издатели.

Итак, наконец, мой вопрос: как бороться с множественными отношениями один-ко-многим одной модели? Спасибо за ваше время !

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

 relations: Publisher: class: Company type: one foreignType: many foreignAlias: PublishedSoftware local: id_publisher foreign: id Developer: class: Company type: one foreignType: many foreignAlias: DevelopedSoftware local: id_developer foreign: id 

И в вашем запросе вы должны присоединиться к обоим отношениям и суммировать индивидуальные счета:

 $q = Doctrine_Query::create() ->select('c.*, COUNT(ps.id)+COUNT(ds.id) AS count_software') ->from('Company c') ->leftJoin('c.PublishedSoftware ps') ->leftJoin('c.DevelopedSoftware ds') ->groupBy('c.id') ; 

Доктриной по умолчанию является использование имени модели в качестве идентификатора для отношения, поэтому, если использовать более одного отношения к одной и той же модели, вы действительно должны переименовать хотя бы один, чтобы доктрина теперь стала то, что вы имеете в виду. Без этого вы не сможете просто получить сборник опубликованного программного обеспечения так:

 $pubSoftware = $myCompany->getPublishedSoftware(); $devSoftware = $myCompany->getDevelopedSoftware(); 

Доктрина не способна (ИМХО) относиться к обоим отношениям к той же модели, что и одна. Поэтому звонок:

 $allSoftware = $myCompany->getSoftware(); 

не будет извлекать все сопутствующее программное обеспечение на модели с несколькими отношениями, а только те, которые могут быть получены из отношения, называемого Software .

Надеюсь, это поможет,

~~~ Приветствия.