CakePHP可包含的行为在测试中不能很好地工作

时间:2015-02-26 14:08:12

标签: cakephp

使用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中工作正常。它似乎只在测试中出现。

0 个答案:

没有答案