我试图设置'Gabarits'之间的m2m关系。在同一张桌子上的多对多关系
- 一个gabarit可以有很多Gabarits(称为选项)
- 一个gabarit可以来自许多Gabarits(称为OptionsFrom)
这里是我的schema.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'));
从逻辑上讲,它会给我这样的:对于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.fils_id WHERE gabarit.id IN (SELECT fils_id FROM gabarit2_gabarit WHERE gabarit_id = '507') ORDER BY gabarit.id ASC
生成的SQL:
foreach($gabarit_>getOptions() as $option)
{
in_array($gabarit->getId(), $options->getOptionsFrom()->getPrimaryKeys()); // should be true but returns false !!
}
生成getOptions)SQL(
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 :: getOptio nsFrom返回一个空集合?
在此先感谢, 弗洛里安。
你是否缺少'Gabarit'的主键?有'description'和'libelle'但没有定义的主键。 – DrColossos 2010-06-23 12:37:04
嗨,当省略主键时,教条自动生成它。 所以我Gabarit有一个ID BIGINT AUTO_INCREMENT(mysql) 我觉得问题不在这里。 – Florian 2010-06-23 12:51:27