与this question类似 - 但由于我对CakePHP的无能,我似乎无法弄清楚这一点。这是我的设置。
我的模型名称User
有很多Comments
。我想要一个包含至少一个Users
的所有不可见Comment
的列表。我们的控制器设置了方法,将records
设置为$this->paginate()
,而不传递任何值;相反,$paginate
var设置了条件和类似的东西。
class UsersController extends AppController {
var $name = 'Users';
var $paginate;
function new_users() {
$this->User->recursive = 1;
$this->paginate['User']['contain'][] = 'Comment';
$this->paginate['User']['order'] = 'User.DateCreated DESC';
$conditions = array();
// Get invisible users...
$conditions[] = array('User.Status = ?' => 'Invisible');
$conditions[] = array('User.Enabled' => true);
// ...with at least one active comment
$conditions[] = array('Comment.Status' => 'Active');
// Load these conditions and fire pagination to render the view
$this->paginate['User']['conditions'] = $conditions;
$this->set('records', $this->paginate());
}
}
我是CakePHP的新手,很多东西仍然在我脑海中。我只想要一个活跃Users
的{{1}}列表。现在,这个查询让我有0个用户。如果我删除关于Comments
的行,则查询会完成,但无论是否有评论,我都会看到Comment.Status
。
我在网上看到Users
电话的所有地方都已经传递给它了(比如paginate()
,我已经尝试过了,并且没有给我任何东西)。
编辑:我有以下代码,虽然更干净,仍然给我相同的结果。
paginate('User', array('Comment.Status' => 'Active'))
答案 0 :(得分:2)
我通常在飞行中使用分页更改。这是一些示例代码。
$this->paginate = array(
'conditions' => array('Recipe.title LIKE' => 'a%'),
'limit' => 10 );
$data = $this->paginate('Recipe');
Here您可以阅读有关分页的控制器设置的更多信息。但是如果你已经在模型中有关联(hasMany等),那么如果你将递归放到1而不需要包含(你仍然可以使用它来获取你想要的数据),则会自动获取数据。它将如何寻找你的一个例子:
$this->paginate = array(
'conditions' => array(
'User.Status' => 'Invisible',
'User.Enabled' => true
),
'contain' => array('Comment' => array(
'conditions' => array('Comment.Status' => 'Active')
)),
'recursive' => 1,
'order' => 'User.DateCreated DESC'
);
$data = $this->paginate('User');
这是你在帖子中添加的内容。如果你粘贴你想要的sql查询,我可以帮助你更多。另外,请尝试检查sql输出,以便了解条件是否有问题。如果您没有并且不知道如何放置sql输出就行了。
var_dump($this->User->getQuery(
'conditions' => array(
'User.Status' => 'Invisible',
'User.Enabled' => true,
'Comment.Status' => 'Active'
),
'contain' => 'Comment',
'order' => 'User.DateCreated DESC'
));
希望它可以帮助你,如果没有,请给我留言。
编辑:这是您需要做的事情,以获得您想要的。 :D更改表格和条件以满足您的需求。
$this->paginate = array(
'conditions' => array(
'User.Status' => 'Invisible',
'User.Enabled' => true
),
'joins' => array(
array(
'table' => 'name_of_comment_table',
'alias' => 'Comment',
'type' => 'inner',
'conditions' => array(
'Comment.user_id = User.id',
'Comment.Status' => 'Active'
)
)
),
'contains' => array('Comment'),
'group' => 'User.id',
'recursive' => 1,
'order' => 'User.DateCreated DESC'
);
$data = $this->paginate('User');