首页 > 解决方案 > 选择带有空“where”的查询。十月cms

问题描述

我使用代码通过 $_GET 进行过滤

    $this['painting'] = Painting::
    where('p_price',$p_price)->
    where('p_created',$p_created)   ->
    where('type_id',$type_id)   ->
    whereHas('artist', function($q)
        {
             $q->where('artist_slug', '=', $this->param('slug'));
        })->get();

网址mysite/page.php?type_id=3&p_created=1996一切正常。

但是,如果我有一些空的参数,我就没有结果。例如 url 是mysite/page.php?type_id=&p_created=1996或 url 是mysite/page.php?type_id=3&p_created=返回空字符串

现在我使用类似的东西

if (!$p_created and !$type_id){
    $this['painting'] = Painting::
    whereHas('artist', function($q)
        {
             $q->where('artist_slug', '=', $this->param('slug'));
        })->get();
}
elseif (!$p_created and $type_id){
        $this['painting'] = Painting::
        where('type_id',$type_id)   ->
        whereHas('artist', function($q)
        {
             $q->where('artist_slug', '=', $this->param('slug'));
        })->get();
}
elseif ($p_created and !$type_id){
        $this['painting'] = Painting::
        where('p_created',$p_created)   ->
        whereHas('artist', function($q)
        {
             $q->where('artist_slug', '=', $this->param('slug'));
        })->get();
}
    elseif ($p_created and $type_id){
        $this['painting'] = Painting::
    where('p_created',$p_created)   ->
    where('type_id',$type_id)   ->
    whereHas('artist', function($q)
        {
             $q->where('artist_slug', '=', $this->param('slug'));
        })->get();

}

我该如何解决?

标签: phpmysqloctobercms

解决方案


我不知道OctoberCMS,也看不到一个明显的方法来获得一个基本的查询对象,但你可以通过做一个总是返回true的查询来模拟它。像这样的东西:

// Assuming type_id is always a positive integer, no nulls allowed
$this['painting'] = Painting::where('type_id', '>', -1);

然后添加每个条件(如果存在):

if ($this->param('slug')){
    $this['painting'] = $this['painting']->
        whereHas('artist', function($q){
             $q->where('artist_slug', '=', $this->param('slug'));
        });
}
if ($p_created){
    $this['painting'] = $this['painting']->
        where('p_created',$p_created);
}
if ($type_id){
    $this['painting'] = $this['painting']->
        where('type_id',$type_id);
}

最后,得到结果:

$this['painting'] = $this['painting']->get();

许多人不需要总是这样做$this['painting'] = $this['painting']->where$this['painting']->where可能就足够了,具体取决于该对象在内部的工作方式。


推荐阅读