0

Cakephp 将数据库外键字段从 user.id 更改为 users.id 会出现错误,例如当我想使用 find() 方法获取 SELECT 数据时:

错误:SQLSTATE [42S22]:找不到列:1054 'where 子句'中的未知列'Model.user_id'

即使在 find 方法中的模型控制器中我使用:

查找('全部',数组'条件' => 数组('Model.users_id' => $userId)

我以为是缓存,但清除缓存-> 模型目录并没有帮助。

4

1 回答 1

1

即使您在查找中指定了条件,这些表在模型中也是相关的。此外,如果 Model.users_id 在主模型的 beloingsTo 数组中定义,它将尝试查找相关记录。

假设您有 Post 和 User。Post 属于 User (Author) 在这种情况下,您在 Post 模型中有一个定义:

$belongsTo = array('User'=>array(...));

在您拥有的用户中

$hasMany = array('Post'=>array(...));

如果您使用的是短语法,例如:

$belongsTo = array('User');

它将搜索像 user_id 这样的外键。

要实现无错误查找,需要设置 $this->Post->recursive = 0; 或通过设置 'contain'=>array 来使用 Containable,例如:

$this->Post->find('all', array(
       'conditions'=>array('Model.users_id'=>(int)$user_id), 
       'contain'=>array()
));

这种方式不会选择关系表,但我建议在模型定义中定义关系列或将列更改为 user_id - 这就是 Cake 易于理解的原因 - 因为它具有严格的命名 DB 约定和知道它们的每个人可以很容易地理解逻辑。

于 2013-09-09T14:04:03.450 回答