2017-01-17 75 views
0

我想用不同的參數製作一個過濾器。其中一個參數是$ article_title。但它可能是空的。我的問題是即使它不是空的,我在return $comments得到空。這是因爲這部分代碼:如何在where子句中使用多個參數?

$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"

+1

你能解釋一下你的具體問題?現在我可以實現一個數字生成器,這將是一個有效的答案:) – Loek

+0

問題是,我總是得到空,當我使用 - > where('title','like',$ article_title);即使我有數據庫中的那個標題 – None

+0

現在是否清楚? :D – None

回答

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); 
+0

語法錯誤,意外的'=>'(T_DOUBLE_ARROW) – None

+0

我修改了我的答案 – Paras

+1

問題是那''> whereHas'需要2個參數。您需要刪除其中的'=>'並用逗號替換它。這就是Paras出現錯誤的原因。 – devk

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; 
+0

我試過這個,但我再次獲得所有評論文章,而不是我輸入$ article_title – None

+0

嘗試第二個。我寫道,第一個獲得**所有**評論。第二個過濾評論。我很抱歉,但真的不清楚你想要什麼,所以我寫了兩個。編輯:你也可以把php標籤放在你的文章中,以便代碼得到正確的突出顯示(這種方式更具可讀性)。 – devk

+0

我認爲你的第二個解決方案的問題是它加載用戶和翻譯,而OP想要用戶和文章,但只希望檢查翻譯 – Paras