Я работаю с унаследованной базой данных, ключи которой следуют соглашению, но, к сожалению, не соглашению о торте, и я столкнулся с чем-то странным в поведении сдерживаемости - это получение неверных данных.Вот мои настройки:
TechnologyIncentive belongsTo...
array(
'Incentive' => array(
'className' => 'Incentive',
'type' => 'inner',
'foreignKey' => false, # actually 'incentive_id', but we need to fool Cake
'conditions' => array( 'TechnologyIncentive.incentive_id = Incentive.incentive_id' ),
),
'Technology' => array(
'className' => 'Technology',
'type' => 'inner',
'foreignKey' => false, # actually 'incentive_tech_id', but we need to fool Cake
'conditions' => array( 'TechnologyIncentive.incentive_tech_id = Technology.incentive_tech_id' )
),
);
Вы можете видеть, что мне пришлось обмануть Cake при работе с моими нестандартными ключами, установив для foreignKey
значение false и определив ссылку в предложении where.Пока все хорошо.
Теперь, когда я пытаюсь выполнить запрос от TechnologyIncentive
модели:
$this->find( 'all', array(
'contain' => array( 'Incentive', 'Technology' ),
'fields' => array( 'Incentive.name', 'Technology.name', 'TechnologyIncentive.amount' ),
'conditions' => array( /** conditions... */ )
);
Все отлично работает.Вещи хорошо содержатся, и я получаю именно то, что ожидаю.Затем мне нужно включить TechnologyGroup
, который hasMany Technology
и вещи почему-то разбиваются.
Теперь моя опция contain
выглядит следующим образом:
'contain' => array( 'Incentive', 'Technology' => array( 'TechnologyGroup' ) )
И что я получаюзадняя запись Incentive
содержит поощрительную запись.Это не совсем удивительно, так как я указываю несколько полей в одном месте (основной параметр fields
) и неявно все поля в параметре contain
, но что мне действительно странно 1023 *, так это то, что они 'Ре разные стимулы.«Содержащийся» стимул является просто неправильным.
При проверке SQL выглядит, как будто запрос был выполнен без какого-либо эффективного условия where, поэтому все извлекается, а затем искусственно ограничивается одной записью.Обратите внимание на разницу между $result['Incentive']['incentive_id']
и $result['Incentive']['Incentive']['incentive_id']
.
Array
(
[Incentive] => Array
(
[incentive_id] => MD046
[name] => Incentive name
[category] =>
[Incentive] => Array
(
[incentive_id] => AK004
[code] => AK04F
[version] => 2
[category] => Incentive Category
)
)
)
Кто-нибудь когда-нибудь сталкивался с этим?Это не проблема, пока я не хочу получить расширенную запись (TechnologyGroup
).Любые мысли будут высоко ценится.