使用CakePHP v2.6.2,我试图使用可包含的行为来测试模型 用命令运行。
./Console/cake test app
这些模型在Web应用程序上运行良好,但在测试中不起作用。
我有一个有两个hasOne条目的Foo类。 User和User2代表相同的表。
class Foo extends AppModel {
public $hasOne = [
'User' => [
'className' => 'User',
'foreignKey' => 'foo_id',
],
'User2' => [
'className' => 'User2',
'foreignKey' => 'foo_id',
],
];
}
class User extends AppModel {
public $useTable = 'users';
}
class User2 extends AppModel {
public $useTable = 'users';
}
然后,使用它。
$this->Foo->find('first', [
'contain' => ['User','User2'],
'recursive' => -1,
]);
在CakeTestCase子类中,它无法加入User2。
SELECT
...
FROM
`skr011`.`ne_foos` AS `Foo`
LEFT JOIN `skr011`.`ne_users` AS `User` ON (`User`.`id` = `Foo`.`id`)
在Web应用程序的真实用例上,它运行良好。
SELECT
...
FROM
`skr011`.`ne_foos` AS `Foo`
LEFT JOIN `skr011`.`ne_users` AS `User` ON (`User`.`id` = `Foo`.`id`)
LEFT JOIN `skr011`.`ne_users` AS `User2` ON (`User2`.`id` = `Foo`.`id`)
当且仅当一个表在sql中出现两次时才会出现, 但不确定。
这会给任何人敲响声吗?
感谢。
[编辑]
修正了上面的代码,表明forignKeys的错误是错误的。 更现实的例子如下。
class Article extends AppModel {
public $hasMany = [
'Comment' => [
'className' => 'Comment',
'foreignKey' => 'article_id',
],
];
public $hasOne = [
'CommentLatest' => [
'className' => 'CommentLatest',
'foreignKey' => 'article_id',
'conditions' => 'CommentLatest.latest_flag = 1',
],
'CommentMostPopular' => [
'className' => 'CommentMostPopular',
'foreignKey' => 'article_id',
'conditions' => 'CommentMostPopular.most_popular_flag = 1',
],
];
}
class Comment extends AppModel {
public $belongsTo = [
'Article' => [
'className' => 'Article',
'foreignKey' => 'article_id',
],
];
}
使用。
$this->Article->find('first', [
'contain' => ['CommentLatest', 'CommentMostPopular'],
]);
[编辑]
它在自己的命令shell中工作正常。它似乎只在测试中出现。