Cakephp$this->;使用自定义联接和筛选选项分页
我已经使用cakephp分页选项两天了。我需要做一个内部连接来列出一些字段,但我必须处理搜索以过滤结果。 这是代码的一部分,我通过Cakephp$this->;使用自定义联接和筛选选项分页,cakephp,Cakephp,我已经使用cakephp分页选项两天了。我需要做一个内部连接来列出一些字段,但我必须处理搜索以过滤结果。 这是代码的一部分,我通过$This->passedArgs function crediti() { if(isset($this->passedArgs['Search.cognome'])) { debug($this->passedArgs); $this->paginate['conditi
$This->passedArgs
function crediti() {
if(isset($this->passedArgs['Search.cognome'])) {
debug($this->passedArgs);
$this->paginate['conditions'][]['Member.cognome LIKE'] = str_replace('*','%',$this->passedArgs['Search.cognome']);
}
if(isset($this->passedArgs['Search.nome'])) {
$this->paginate['conditions'][]['Member.nome LIKE'] = str_replace('*','%',$this->passedArgs['Search.nome']);
}
Array
(
[Search.cognome] => aiello
)
Array $this->paginate['conditions'][]
(
[0] => Array
(
[Member.cognome LIKE] => aiello
)
[1] => Array
(
[Member.sospeso] => NO
)
之后
$this->paginate = array(
'joins' => array(array('table'=> 'reservations',
'type' => 'INNER',
'alias' => 'Reservation',
'conditions' => array('Reservation.member_id = Member.id','Member.totcrediti > 0' ))),
'limit' => 10);
$this->Member->recursive = -1;
$this->paginate['conditions'][]['Reservation.pagamento_verificato'] = 'SI';
$this->paginate['fields'] = array('DISTINCT Member.id','Member.nome','Member.cognome','Member.totcrediti');
$members = $this->paginate('Member');
$this->set(compact('members'));
内部连接工作得很好,但是$this->pagination忽略每个$this->paginate['conditions'][]通过$this->passedArgs
,我不知道如何计算它。
调试中没有查询,只有原始的内部联接
。
有人能帮我吗?
多谢各位
更新:
运气不好。
我已经处理这部分代码好几个小时了。
如果我使用
if(isset($this->passedArgs['Search.cognome'])) {
$this->paginate['conditions'][]['Member.cognome LIKE'] = str_replace('*','%',$this->passedArgs['Search.cognome']);
}
$this->paginate['conditions'][]['Member.sospeso'] = 'SI';
$this->Member->recursive = 0;
$this->paginate['fields'] = array(
'Member.id','Member.nome','Member.cognome','Member.codice_fiscale','Member.sesso','Member.region_id',
'Member.district_id','Member.city_id','Member.date','Member.sospeso','Region.name','District.name','City.name');
$sospesi = $this->paginate('Member');
一切都很顺利,从调试开始,我收到了第一个条件以及来自$this->paginate['conditions']['Member.cognome LIKE']
的条件,如您所见
数组$this->passedArgs
function crediti() {
if(isset($this->passedArgs['Search.cognome'])) {
debug($this->passedArgs);
$this->paginate['conditions'][]['Member.cognome LIKE'] = str_replace('*','%',$this->passedArgs['Search.cognome']);
}
if(isset($this->passedArgs['Search.nome'])) {
$this->paginate['conditions'][]['Member.nome LIKE'] = str_replace('*','%',$this->passedArgs['Search.nome']);
}
Array
(
[Search.cognome] => aiello
)
Array $this->paginate['conditions'][]
(
[0] => Array
(
[Member.cognome LIKE] => aiello
)
[1] => Array
(
[Member.sospeso] => NO
)
但是,如果我用paginate编写连接,$this->paginate['conditions'][]
将忽略所有内容,并从调试中给我提供,只要$this->paginate['conditions']['Reservation.pagamento\u verificato']='SI'代码>
另一点信息。
如果我把所有处理$this->paginate['conditions']['Reservation.pagamento_verificato']='SI'代码>
在加入$this->paginate
之前,$this->paginate['conditions'][
我不确定您是否需要这些[]-尝试这样做:
$this->paginate['conditions']['Reservation.pagamento_verificato'] = 'SI';
我在调用paginate方法时使用这些条件
$this->paginate($conditions)
这对我来说没问题,我希望它对你有用
如果已设置以前的参数,则可以使用:
$this->paginate(null,$conditions)
这是一个老生常谈的问题,所以我只想回顾一下如何为像我一样从谷歌来到这里的其他人加入分页。下面是小部件控制器的示例代码,将Widget.user_id FK连接到user.id列,仅显示当前用户(在条件中):
这使得查询类似于:
SELECT widgets.* FROM widgets
INNER JOIN users ON widgets.user_id = users.id
WHERE users.id = {current user id}
而且仍然分页。这可能对某人有很大帮助。。。。
这就是我在cakephp中使用分页实现复杂连接的方法
$parsedConditions['`Assessment`.`showme`'] = 1;
$parsedConditions['`Assessment`.`recruiter_id`'] = $user_id;
$this->paginate = array(
'conditions' => array($parsedConditions ),
'joins' => array(
array(
'alias' => 'UserTest',
'table' => 'user_tests',
'type' => 'LEFT',
'conditions' => '`UserTest`.`user_id` = `Assessment`.`testuser_id`'
),
array(
'alias' => 'RecruiterUser',
'table' => 'users',
'type' => 'LEFT',
'conditions' => '`Assessment`.`recruiter_id` = `RecruiterUser`.`id`'
)
,
array(
'alias' => 'OwnerUser',
'table' => 'users',
'type' => 'LEFT',
'conditions' => '`Assessment`.`owner_id` = `OwnerUser`.`id`'
)
),
'fields' => array('Assessment.id', 'Assessment.recruiter_id', 'Assessment.owner_id', 'Assessment.master_id', 'Assessment.title', 'Assessment.status', 'Assessment.setuptype','Assessment.linkkey', 'Assessment.review', 'Assessment.testuser_email', 'Assessment.counttype_2', 'Assessment.bookedtime', 'Assessment.textqstatus', 'Assessment.overallperc', 'UserTest.user_id', 'UserTest.fname', 'UserTest.lname', 'RecruiterUser.company_name', 'OwnerUser.company_name'),
'limit' => $limit,
'order'=> array('Assessment.endtime' => 'desc')
);
另外,关于“joins”选项,我能找到的唯一文档是CakePHP代码本身,Model.find()的doc块中。我发现paginate()函数在cake中考虑得很差。谢谢你的回答-我一直在寻找这个问题的解决方案。这里有一个解决方案:CakePHP 2.3.4 How没有想出如何做一个适当的简单的'OR'尽管..重新记下下面的where语句where(评估
招聘人员id
='.$user\u id.'或评估
所有者id
='.$user\u id.)