如何在where子句中使用多个参数?

时间:2017-01-17 15:27:27

标签: php laravel laravel-5 laravel-5.2

我想用不同的参数制作一个过滤器。其中一个参数是$ article_title。但它可能是空的。我的问题是即使它不是空的我在return $comments中得到null。那是因为这部分代码:

 $q->where('language_id', $default_language_id)->where('title','like',$article_title);

这是我的功能

public function getResultCommentsWithArticle($comment,$user_firstname,$article_title,$orderBy){
      $default_language = Languages::where('default',1)->first();
      $default_language_id = $default_language->id;

      $comments = ArticleComments::orderBy($orderBy,'desc')
          ->with(['user', 'article', 'article.translations' => function($q) use($default_language_id,$article_title) {
              $q->where('language_id', $default_language_id)->where('title','like',$article_title);
          }])->paginate(10);
      return $comments;
    }

编辑:

我也尝试过这样:

$comments = ArticleComments::orderBy($orderBy,'desc')
            ->with(['user', 'article', 'article.translations' => function($q) use($default_language_id,$article_title) {

                $q->where([
                    ['language_id', '=', $default_language_id],
                    ['title', 'like', '%'. $article_title .'%'],
                ]);
            }])->paginate(10);

但我得到了所有评论,而不是commentstitle="something"

2 个答案:

答案 0 :(得分:2)

$comments = ArticleComments::orderBy($orderBy,'desc')
            ->with(['user', 'article'])
            ->whereHas('article.translations', function($q) 
                use($default_language_id,$article_title) {

                $q->where('language_id', $default_language_id)
                ->where('title','like',$article_title);
            })->paginate(10);

答案 1 :(得分:0)

试试这个:

$comments =  ArticleComments::orderBy($orderBy, 'desc')
    ->with(['user', 'article' => function ($q) use($default_language_id, $article_title) {
        $q->with('translations')
            ->whereHas('translations', function ($q) use($default_language_id, $article_title) {
                $q->where('language_id', $default_language_id)->where('title','like',$article_title);
            });
    }])->paginate();

这将选择所有条评论,并附上匹配 translation.title和默认语言ID的文章。

如果您想要过滤评论而不是文章,请执行以下操作:

$comments =  ArticleComments::orderBy($orderBy, 'desc')
    ->with(['user', 'article.translation'])
    ->whereHas('article', function ($q) use($default_language_id, $article_title) {
        $q->whereHas('translations', function ($q) use($default_language_id, $article_title) {
                $q->where('language_id', $default_language_id)->where('title','like',$article_title);
            });
    })->paginate();

    return $comments;