2017-06-16 135 views
1

在我的情況下,我有渠道表是在多對多關係類別表。哪裏查詢whereaas不工作,因爲它應該在Laravel 5.4

我想獲取他們的類別包含動態值的渠道,比如對LIKE查詢每個類別的標題。但我需要通過Where子句檢查頻道的另一列。

這是一個通道結構:

[ 
    { 
    "id": 87, 
    "username": "ch1", 
    "title": "ch title", 
    "type": "channel", 
    "members": 210424, 
    "location": "tabriz", 
    "created_at": "2017-05-09 01:39:44", 
    "updated_at": "2017-05-16 17:19:28", 
    } 
] 

得到我想要什麼,我運行此查詢:

$channels = Channel::orderBy('members', 'desc') 
      ->whereHas('categories', function ($query) use ($category) { 
       $query->where('title', 'LIKE', '%' . $category . '%'); 
      }) 
      ->where([ 
       ['visible', 1], 
       ['title', 'LIKE', '%' . $trend . '%'], 
       ['location', 'LIKE', '%' . $location . '%'], 
       ['members', '>', $members]]) 
      ->get(); 

上查詢返回我所有的渠道像查詢,而whereHas當我單獨使用'whereHas'時,它會返回頻道與我想要的類別!

我使用錯誤的語法嗎?並排使用wherewhereHas子句是否屬實?

UPDATE:

我需要做渠道的標題或用戶名like查詢,所以我用orWhere但結果卻是像以前一樣!它會將所有頻道返回給我!像查詢沒有whereHas再次。 所以我用這個查詢做到這一點,

$channels = Channel::orderBy('members', 'desc') 
      ->whereHas('categories', function ($query) use ($category) { 
       $query->where('title', 'LIKE', '%' . $category . '%'); 
      }) 
      ->where([ 
       ['visible', 1], 
       ['title', 'LIKE', '%' . $trend . '%'], 
       ['location', 'LIKE', '%' . $location . '%'], 
       ['members', '>', $members]]) 
      ->orWhere([ 
       ['visible', 1], 
       ['username', 'LIKE', '%' . $trend . '%'], 
       ['location', 'LIKE', '%' . $location . '%'], 
       ['members', '>', $members]]) 
      ->get(); 

起初我以爲這個問題是排序依據子句@exprator賽義德,但加入後orWhere我瞭解,orderBy不是我的問題。

+0

你在哪裏應用條件分類? –

回答

1
Channel::whereHas('categories', function ($query) use ($category) { 
       $query->where('title', 'LIKE', '%' . $category . '%'); 
      })->orderBy('members', 'desc') 

的ORDER_BY

->orWhere(function ($query) { 
       $query->where('visible', '=', 1) 
         ->where('username', 'LIKE', '%' . $trend . '%') 
         ->where('location', 'LIKE', '%' . $location . '%') 
         ->where('members', '>', $members); 
      }) 
+0

非常感謝。而已! –

+0

歡迎兄弟:)很高興可以幫助 – Exprator

+0

我需要對頻道的標題或用戶名進行'like'查詢,所以我使用'orWhere',但結果與以前一樣!它會將所有頻道返回給我!像沒有'whereHas'的查詢。 –

0

我通過orWhere後複製whereHas條款解決了這個問題之前使用whereHas。 所以去取那是我想要的,我用這個查詢類渠道:

$channels = Channel::orderBy('members', 'desc') 
      ->whereHas('categories', function ($query) use ($category) { 
       $query->where('title', 'LIKE', '%' . $category . '%'); 
      }) 
      ->where([ 
       ['visible', 1], 
       ['title', 'LIKE', '%' . $trend . '%'], 
       ['location', 'LIKE', '%' . $location . '%'], 
       ['members', '>', $members]]) 
      ->orWhere([ 
       ['visible', 1], 
       ['username', 'LIKE', '%' . $trend . '%'], 
       ['location', 'LIKE', '%' . $location . '%'], 
       ['members', '>', $members]]) 
      ->whereHas('categories', function ($query) use ($category) { 
       $query->where('title', 'LIKE', '%' . $category . '%'); 
      }) 
      ->get(); 

也許是奇怪,但工作真好!

0

儘量在->where()之後使用->whereHas()。你不需要正常地複製任何東西。

$channels = Channel::where([ 
      ['visible', 1], 
      ['title', 'LIKE', '%' . $trend . '%'], 
      ['location', 'LIKE', '%' . $location . '%'], 
      ['members', '>', $members]]) 
     ->orWhere([ 
      ['visible', 1], 
      ['username', 'LIKE', '%' . $trend . '%'], 
      ['location', 'LIKE', '%' . $location . '%'], 
      ['members', '>', $members]]) 
     ->whereHas('categories', function ($query) use ($category) { 
      $query->where('title', 'LIKE', '%' . $category . '%'); 
     }) 
     ->orderBy('members', 'desc') 
     ->get();