2016-12-15 124 views
0

我有問題查詢laravel表。Laravel查詢關係表

我有這樣的關係:每個用戶都有附件,並且附件屬於用戶。我在模型中寫了關係。

我的問題是:如何查詢,如果我想返回用戶與關係附件,但對於附件,其中級別=用戶級別?即使我在哪裏有回報給我的所有用戶附件。請幫忙!

回答

0

當您查詢模型關係,你喜歡寫東西

$attachments = $userModel->attachments; 

這是

$attachments = $userModel->attachments()->get(); 

一個快捷方式,你可以寫

$attachments = $userModel->attachments()->where('level', 'user')->get(); 
+0

好的,但在這種情況下,我必須得到用戶第一。我想做一個查詢,如:Profile :: with('attachment')。我想獲取對象配置文件與相關數據,但不是所有相關的數據,但其中level = user_level –

1

如果你想找到用戶衛生組織附件遇到具體限制,然後使用whereHas方法

UserModel::whereHas('attachments', function ($attachmentQuery) { 
    $attachmentQuery->where('level', 'profile_level'); 
})->get(); 

如果從已經查詢模式要得到具體的附件,然後寫

$userModel->attachments()->where('level', 'profile_level')->get(); 

這是不可能的查詢兩者的usermodel和AttachementModel單查詢,它必須至少有兩個查詢。即使看起來UserModel::with('attachments')->get();,它返回所有附件的用戶,在內部做兩個查詢。

編輯:

我注意到,你可以定義relation constraintswith方法

UserModel::with(['attachments' => function ($attachmentQuery) { 
    $attachmentQuery->where('level', 'profile_level'); 
}])->get(); 

所以,如果你想找到用戶衛生組織附件滿足特定的約束,並渴望載荷的附件,那麼你可以做

$queryAttachments = function ($attachmentQuery) { 
    $attachmentQuery->where('level', 'profile_level'); 
}; 

UserModel::whereHas('attachments', $queryAttachments) 
->with(['attachments' => $queryAttachments])->get(); 
+0

是的這是正確的,但我想返回用戶與附件,但不是與所有附件,但與附件其中level = profile_level。我希望現在很清楚 –

+0

我編輯了我的答案。 –

+0

幾乎在那裏。但是現在我只有附件的對象沒有用戶信息:(我不知道是否有任何選項可以從後端進行此操作?如果不是,我只是返回用戶所有附件,然後在前端獲得特定附件。 –

0

您可以結合使用whereHaswith方法作爲:

Profile::whereHas('attachments', function ($q) { 
     $q->where('level', 'user'); 
    }) 
    ->with(['attachments', function ($q) { 
     $q->where('level', 'user'); 
    }]) 
    ->get();