2016-01-10 40 views
2

我目前正面臨一個小問題。我只想在某種條件存在的情況下才返回模型。這對於whereHas()方法來說工作得很好。Laravel - 有沒有辦法結合whereHas和

$m = Model 
    ::whereHas(
     'programs', 
     function($q) { 
      $q->active(); 
     } 
    ); 

但是,將關係作爲像這樣的屬性調用會給我所有的(不是過濾結果)。

$m->programs; 

所以基本上我現在正在做的是這樣的:

$m = Model 
    ::whereHas(
     'programs', 
     function($q) { 
      $q->active(); 
     } 
    ) 
    ->with(array('programs' => function($q) { 
     $q->active(); 
    })) 
; 

這是工作正常,但我覺得再次做同樣的事情非常糟糕。這不可能是正確的方法。如何在不重複代碼的情況下實現這一點?

+0

我不認爲有一個簡短/更好的方式與查詢生成器。 –

+0

Here:http://stackoverflow.com/questions/29591931/merge-with-and-wherehas-in-laravel-5#answer-29594039 – Lucas

回答

5

如果「活動方案」的概念是在你的應用程序非常重要,考慮創建(我假設你有一個的hasMany關係,在這種情況下)只是活動程序的獨立的關係:

class Model 
{ 
    public function activePrograms() 
    { 
     return $this->hasMany(Program::class)->active(); 
    } 
} 

然後,您可以簡化您的查詢:

Model::with('activePrograms')->has('activePrograms')->get(); 
+0

有趣!你可以添加一個查詢生成器修改爲關係?它是不同的類,我不知道它們是兼容的 –

+1

是的,你可以鏈接關係上的任何構建器方法。這是Eloquent在我看來最強大的功能之一。 –

+0

我想過這個,然後決定'不,這太酷了')))感謝信息 –

相關問題