【问题标题】:cakephp pagination with conditioncakephp分页条件
【发布时间】:2015-07-22 21:03:35
【问题描述】:

我已经定义了条件变量值。我需要写这个格式我怎么写这个。

$this->Paginator->settings = array('conditions' => array(
    if(!empty($this->request->data['filter']['delivery']))
    {
    'Gig.delivery <=' => $this->request->data['filter']['delivery'],
    }
    if(!empty($this->request->data['filter']['delivering']))
    {
    "Gig.bangsalsodelivering IN ({$csv_deliveringfilters})",
    }
    if(!empty($this->request->data['filter']['servicetype']))
    {
    "Gig.bangsservicetype IN ({$csv_bangsservicetypesfilters})",
    }
    if(!empty($this->request->data['filter']['style']))
    {
    "Gig.bangsstyles IN ({$csv_stylefilters})",
    }
    if(!empty($this->request->data['filter']['fileformate']))
    {
    "Gig.bangsfileformates IN ({$csv_fileformatefilters})",
    }
));
$agetGigsItem = $this->Paginator->paginate('Gig');

【问题讨论】:

    标签: php cakephp pagination string-concatenation


    【解决方案1】:

    条件通常是一个数组

    条件通常作为数组处理,作为字符串处理。比如这个:

    $this->Paginator->settings = [
        'conditions' => ['Gig.field' => 'is this value']
    ];
    
    $agetGigsItem = $this->Paginator->paginate('Gig');
    

    将应用此 sql 条件:

    WHERE Gig.field = "is this value"
    

    使用字符串连接构建条件是一个坏主意。除了更麻烦之外,这意味着您需要自己处理用户输入的转义。

    工作解决方案

    鉴于问题中的代码,这将执行所要求的操作:

    $conditions = [];
    $filter = $this->request->data['filter'];
    
    if(!empty($filter['delivery'])) {
        $conditions['Gig.delivery <='] = $filter['delivery'];
    }
    
    if(!empty($filter['delivering'])) {
        $conditions['Gig.bangsalsodelivering'] = explode(',', $filter['delivering']);
    }
    
    if(!empty($filter['servicetype'])) {
        $conditions['Gig.bangsservicetype'] = explode(',', $filter['servicetype']);
    }
    
    if(!empty($filter['style'])) {
        $conditions['Gig.bangsstyles'] = explode(',', $filter['style']);
    }
    
    if(!empty($filter['fileformate'])) {
        $conditions['Gig.bangsfileformates'] = explode(',', $filter['fileformate']);
    }
    
    $this->Paginator->settings['conditions'] = $conditions;
    $agetGigsItem = $this->Paginator->paginate('Gig');
    

    请注意,数组值会自动转换为IN () 条件子句,如果不等于 - 则比较在数组键中。

    请务必查看the documentation 以了解您正在使用的版本,以了解有关how to use paginationhow to query the database 的更多信息。

    【讨论】:

    • 我正在使用复选框,所以我需要在我的问题中输入 IN $csv_bangsservicetypesfilters 变量已内爆复选框值
    • $csv_bangsservicetypesfilters 未在问题中定义 - 我将留给您弄清楚如何使用这个神秘变量。
    • 但是在这个我得到这个答案 WHERE Gig.bangsfileformates IS NULL LIMIT 20
    • 您必须付出一些努力才能弄清楚 - 我无法告诉您该怎么做,因为问题中没有信息可以告诉我为什么会这样。您的问题也仍然充满解析错误。如果您希望人们花时间回答您的问题花时间写一个好问题。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 2015-06-26
    • 2011-07-10
    • 2011-09-27
    相关资源
    最近更新 更多