我試圖設置'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