如果字段为空,则在limit参数中设置fetch all选项

时间:2019-02-14 09:00:22

标签: php

对于我的功能,我想设置2个如下参数,并且仅在用户要使用该参数时设置查询限制。

public function getNewsByCatId($id, $limit){

    $args = array(
        'fields' => array(
                    'news.id', 
                    'news.title',  
                    'news.story', 
                    'news.image',
                    'news.status',
                    'news.added_date',
                    'categories.title AS news_category',
                    '(SELECT users.full_name FROM users WHERE id = news.added_by) as author',
                ),
        'where' => array(
            'news_category' => $id 
        ),
        'join'  => 'LEFT JOIN categories on news.news_category = categories.id',
       'limit' => array(0, $limit);
    );

    return $this->select($args);

}

如果我未在函数中传递limit值,应将什么设置为默认参数值?我可以在函数内使用if else条件吗?示例:

 public function getNewsByCatId($id, $limit){

    $args = array(
        'fields' => array(
                    'news.id', 
                    'news.title',  
                    'news.story', 
                    'news.image',
                    'news.status',
                    'news.added_date',
                    'categories.title AS news_category',
                    '(SELECT users.full_name FROM users WHERE id = news.added_by) as author',
                ),
        'where' => array(
            'news_category' => $id 
        ),
        'join'  => 'LEFT JOIN categories on news.news_category = categories.id',
    );

    if ($limit > 0) {
          //condition to be applied
       } else {
   //condition to be applied
    }

    return $this->select($args);

    }

3 个答案:

答案 0 :(得分:3)

容易做到

public function getNewsByCatId(int $id, ?int $limit = 10) {

   $args = [
      // your original argument definition
      // do NOT SET LIMIT HERE
   ];

   if ($limit !== null && $limit > 0) {
      $args['limit'] = [0, $limit];
   }

   return $this->select($args);

}

我已经格式化了现代PHP的代码。如果您的PHP版本不支持类型提示,短数组声明等,请更改代码(或者更好的方法是考虑升级PHP引擎)。

通过这种方式,您可以使用默认的$limit客户端,或者可以通过null(或整数<= 0)完全禁用该限制。

答案 1 :(得分:1)

您应该在函数定义中将默认值传递给$limit变量。如果$limit的默认值表示未设置,则可以避免在查询数组中应用限制条件。检查以下代码:

function getNewsByCatId($id, $limit = false){

    $args = array(
        'fields' => array('news.id', 'news.title', 'news.story', 'news.image', 'news.status', 'news.added_date',
            'categories.title AS news_category', '(SELECT users.full_name FROM users WHERE id = news.added_by) as author'),

        'where' => array(
            'news_category' => $id 
        ),

        'join'  => 'LEFT JOIN categories on news.news_category = categories.id',
    );
    if ($limit && $limit > 0 && is_numeric($limit)) { /* Only applying limit condition if you some value in it.*/
        $args['limit'] = array(0, $limit);
    }
    return $this->select($args);
}

希望它对您有帮助。

答案 2 :(得分:-1)

将第二个参数的默认值设置为null。并在函数中添加一些条件。

public function getNewsByCatId($id, $limit=NULL){

    // Your code

    if($limit){
        // Your code            
    }

 }