2017-07-31 43 views
1

我有3個表:如何用關係雄辯的方式添加「where」子句?

  • 用戶
  • 事務頭
  • 成交詳情

和工作臺之間的關係是:

  • 用戶具有一個transactionHeader
  • transactionHeade [R屬於用戶
  • transactionHeader有許多人transactionDetail
  • transactionDetail屬於用戶

,現在我需要通過這種方式來訪問:

$response = User::select(['user_id'])->first(); 
$response->transactionHeader->transactionDetail->where('trans_detail_id', '=', '1'); 

上面的代碼顯示正確的數據但是無法通過->where('trans_detail_id', '=', '1');進行過濾。 trans_detail_id裏面transactionDetail表。沒有錯誤,但我的問題是爲什麼數據沒有通過trans_detail_id='1'過濾?

請修復我的代碼,並解釋爲什麼?

謝謝

+0

哪個框架您使用的? –

+0

Laravel框架5.1 – Patrick

+0

@SagarGautam避免[迫使標籤標題(https://stackoverflow.com/help/tagging) – jkucharovic

回答

2

你試過渴望與對嵌套關係查詢裝載有關係嗎?

$response = User::select(['user_id'])->with(['transactionHeader.transactionDetail' => function($query) { 
     $query->where('trans_detail_id', 1); 
}])->first(); 
+0

我已經嘗試,但我得到了另一個問題。如何獲得trans_detail_id? 我使用:$ response-> transaction_header //結果爲null – Patrick

+0

'$ response-> transactionHeader-> transactionDetail-> first() - > trans_detail_id',並避免使用泛型變量名稱。在這種情況下,如果使用'$ user'而不是'$ response',則會更具描述性。 – dbr

-1

希望它有幫助!

$response->transactionHeader->transactionDetail->where('trans_detail_id', '1'); 
+0

沒有錯誤,但過濾器不工作 – Patrick

+0

這是完全一樣的,你有你的問題是什麼。 – dbr

0

你可以試試這個方法:

$response = User::select(['user_id'])->first(); 
$response->transactionHeader()->transactionDetail()->where('trans_detail_id', '=', '1'); 

,並通過這種方式也將工作:

$response = User::select(['user_id'])->with(['transactionHeader.transactionDetail' => function($query) { 
     $query->where('trans_detail_id', 1); 
}])->first(); 

但現在你要使用可變數據,而不是1 'trans_detail_id'

$value = $request->value_to_filter_data; 

$response = User::select(['user_id'])->with(['transactionHeader.transactionDetail' => function($query) use ($value) { 
      $query->where('trans_detail_id',$value); 
    }])->first();