Я пытаюсь установить отношение m2m между 'Gabarits'.
- В одном габарите может быть много габаритов (называемых опциями)
- В одном габарите может быть много габаритов (называемых опциями)
Вот моя схема.yml:
Gabarit:
actAs: [Attachable]
columns:
libelle: { type: string, size: 255 }
description: { type: clob }
relations:
Options:
class: Gabarit
refClass: Gabarit2Gabarit
local: gabarit_id
foreign: fils_id
foreignAlias: OptionsFrom
Gabarit2Gabarit:
columns:
fils_id: { type: integer, primary: true }
gabarit_id: { type: integer, primary: true }
relations:
Gabarit:
class: Gabarit
local: gabarit_id
alias: Gabarit
foreignAlias: Gabarit2Gabarits
Fils:
class: Gabarit
local: fils_id
alias: Fils
foreignAlias: Gabarit2Gabarits
Сгенерированный код:
$this->hasMany('Gabarit as Options', array(
'refClass' => 'Gabarit2Gabarit',
'local' => 'gabarit_id',
'foreign' => 'fils_id'));
$this->hasMany('Gabarit as OptionsFrom', array(
'refClass' => 'Gabarit2Gabarit',
'local' => 'fils_id',
'foreign' => 'gabarit_id'));
Кажется хорошим, согласно http://www.doctrine -project.org / projects / orm / 1.2 / docs / manual/ defining-models / en # отношения: объединения таблиц-связей: самореферентные-гнезда-отношения: неравные-гнезда-отношения
Логически, это даст мне следующее:
foreach($gabarit_>getOptions() as $option)
{
in_array($gabarit->getId(), $options->getOptionsFrom()->getPrimaryKeys()); // should be true but returns false !!
}
Сгенерированный SQL для getOptions ():
SELECT gabarit.id AS gabarit__id, gabarit.libelle AS gabarit__libelle, gabarit.description AS gabarit__description, gabarit2_gabarit.fils_id AS gabarit2_gabarit__fils_id, gabarit2_gabarit.gabarit_id AS gabarit2_gabarit__gabarit_id FROM gabarit INNER JOIN gabarit2_gabarit ON gabarit.id = gabarit2_gabarit.fils_id WHERE gabarit.id IN (SELECT fils_id FROM gabarit2_gabarit WHERE gabarit_id = '507') ORDER BY gabarit.id ASC
Сгенерированный SQL для getOptionsFrom ():
SELECT gabarit.id AS gabarit__id, gabarit.libelle AS gabarit__libelle, gabarit.description AS gabarit__description, gabarit2_gabarit.fils_id AS gabarit2_gabarit__fils_id, gabarit2_gabarit.gabarit_id AS gabarit2_gabarit__gabarit_id FROM gabarit INNER JOIN gabarit2_gabarit ON gabarit.id = gabarit2_gabarit.gabarit_id WHERE gabarit.id IN (SELECT gabarit_id FROM gabarit2_gabarit WHERE fils_id = '529') ORDER BY gabarit.id ASC
У вас есть идея, почему Gabarit :: getOptionsFrom возвращаетпустая коллекция?
заранее спасибо, Флориан.