2014-10-16 68 views
0

在Laravel您可以用與方法像這樣取一個查詢中涉及的數據庫條目:Laravel:獲取與在那裏的「與」過濾器

$customer = Customer::with('user')->where([ 
    'id' =>'1' 
])->first(); 

將返回一個客戶和它的相關的用戶對象。是否可以使用項目對此應用過濾器?我認爲這是可能的:

$customer = Customer::with('user')->where([ 
    'id' =>'1', 
    'users.status' => 'activated' 
])->first(); 

但是,這似乎並沒有工作,它試圖找到一列「users.status」,而不是在用戶表中的列狀態。

回答

2

您可以使用Eager加載約束。它允許您在相關模型上執行查詢。

像這樣:

$customer = Customer::with(['user' => function($query){ 
    $query->where('status', 'activated'); //in the user table 
}])->where('id', '1')->first(); //in the customer table 

您可以閱讀更多的信息,貪婪加載constaints部分:

http://laravel.com/docs/4.2/eloquent#eager-loading

1

,我會在我的一些除了MrShibby的答案代碼拋出。 這就是我的做法,也許你覺得很有用。

$activities = Activity::with('user') 
    ->with(array('images'=>function($query){ 
     $query->orderBy('sort','ASC'); 
    })) 
    ->with(array('images.titles'=>function($query){ 
     $query->orderBy('language_id','ASC'); 
    }))     
    ->with(array('contents'=>function($query){ 
     $query->orderBy('language_id','ASC'); 
    })) 
    ->with(array('titles'=>function($query){ 
     $query->orderBy('language_id','ASC'); 
    }))    
    ->where('user_id',$user_id) 
    ->whereRaw('DATE(NOW()) between online_from and online_until') 
    ->orderBy('sort', 'ASC') 
    ->get(); 
2

你可以這樣寫查詢:

$customer = Customer::with(['user' => function($q){ 
    $q->whereStatus('activated'); 
}])->find(1); 

假設你的主鍵是1,你不需要使用where('id','=','1')->get(),你可以簡單地使用find(1)和選擇只對一些記錄您使用建築的相關表格with也會關閉。