一个帖子有一个用户(belongsTo),一个用户有一个个人资料(hasOne)。通常一切正常:我可以从 Post 到 User 以及从 User 到 Profile 访问。
从 Post 开始,所有作品都使用通用 Find。结果或多或少是这样的(例如,我删除了一些键):
array(
'Post' => array(
'id' => '1',
'category_id' => '1',
'user_id' => '1',
'title' => 'Example',
'text' => '',
),
'User' => array(
'password' => '*****',
'id' => '1',
'group_id' => '1',
'username' => 'mirko',
'status' => 'active',
'Profile' => array(
'id' => '1',
'user_id' => '1',
'first_name' => 'Mirko',
'last_name' => 'Pagliai',
),
)
)
当我使用“字段”时,问题就来了,我只想提取几个字段。例如,这有效:
'fields' => array('id', 'title', 'User.id')
结果是:
array(
'Post' => array(
'id' => '1',
'title' => 'Articolo di prova :-)'
),
'User' => array(
'id' => '1'
)
)
但我不明白,总是使用“字段”,如何访问 Profile。这些不起作用:
'fields' => array('id', 'title', 'User.id', 'Profile.id')
'fields' => array('id', 'title', 'User.id', 'User.Profile.id')
我总是收到此错误“错误:SQLSTATE [42S22]:找不到列:1054 '字段列表'中的未知列'User.Profile.id'”。
怎么了?谢谢。
编辑:我没有使用 Containable 行为。也许这是问题所在?在这种情况下是否必要?
使用分页的示例:
$this->paginate = array(
'conditions' => $conditions,
'fields' => array('id', 'title', 'User.id', 'Profile.id'),
'limit' => 10,
'recursive' => 2,
);
EDIT2:感谢@Hoff,我接近解决方案。但是还是有问题(而且 Containable 非常有用!)。在 AppModel.php 我添加:
...
class AppModel extends Model {
public $actsAs = array('Containable');
public $recursive = -1;
...
但这不起作用:
$this->paginate = array(
'conditions' => $conditions,
'contain' => array(
'User' => array(
'fields' => array('id'),
'Profile' => array(
'fields' => array('id', 'full_name'),
),
),
'Category' => array(
'fields' => 'title',
),
),
'fields' => array('id', 'user_id', 'category_id', 'title', 'created', 'modified', 'published'),
'limit' => 10,
);
因为我得到:
array(
(int) 0 => array(
'Post' => array(
'id' => '1',
'user_id' => '1',
'category_id' => '1',
'title' => 'Articolo di prova :-)',
'created' => '2012-06-21 18:46:00',
'modified' => '0000-00-00 00:00:00',
'published' => true
),
'Category' => array(
'title' => 'prova',
'id' => '1'
),
'User' => array(
'id' => '1'
)
)
)
但如果我向用户添加任何字段(电子邮件、用户名、密码等),这将有效:
'User' => array(
'fields' => array('id', 'username'),
'Profile' => array(
'fields' => array('id', 'full_name'),
),
),
我得到:
array(
(int) 0 => array(
'Post' => array(
'id' => '1',
'user_id' => '1',
'category_id' => '1',
'title' => 'Articolo di prova :-)',
'created' => '2012-06-21 18:46:00',
'modified' => '0000-00-00 00:00:00',
'published' => true
),
'Category' => array(
'title' => 'prova',
'id' => '1'
),
'User' => array(
'id' => '1',
'username' => 'mirko',
'Profile' => array(
'id' => '1',
'full_name' => 'Mirko Pagliai'
)
)
)
)