[英]Select from table 1 with foreign_key = x on table 2 where table 2 foreign key = Y on table 3
不確定標題是否有意義,但這里有一個更好的描述:我有一個輪班表,其中有一個輪班工人的 id 和一個輪班工人為之做某事的客戶的 id,並且客戶表有一個用戶id 與用戶表中的關聯記錄。
我想 select 所有班次都有一個客戶 ID,其中客戶記錄上的關聯用戶 ID 是 X。
Shifts Table
shift_id
shiftworker_id
client_id
...
Clients Table
client_id
user_id
...
Users Table
user_id
...
所以,我想要所有記錄(來自班次),其中班次的 client_id 屬於特定用戶。
用戶有很多客戶,客戶有很多與之相關的班次。 我想我追求的是這樣的加入:
select * from shifts join shifts.client_id on clients.id and where clients.user_id = X
我正在嘗試在 Laravel 中執行此操作,例如:
DB::table('shifts')->join('clients', 'client_id', '=', ...)->join('users', 'client_id', '=', X);
盡管對 SQL 的任何幫助表示贊賞,但我可以從那里找出 Laravel 查詢。
謝謝
最簡單的方法是創建“具有多個直通關系”並使用“用戶 ID”查詢用戶 model,而不是查詢班次。
class User extends Model
{
public function shifts()
{
return $this->hasManyThrough(Shift::class, Client::class);
}
}
class ShiftController extends Controller
{
public function index()
{
return User::where('id', 1)->with('shifts')->first()->shifts;
}
}
如果有效,controller 代碼將返回班次表中的記錄,不帶任何關系數據或額外字段。 如果您需要添加一些額外的字段,此方法可能不是最好的方法。 在這種情況下,請提供有關所需 output 數據的更多詳細信息。
評論后更新
您不需要使用任何 eloquent 關系 function 來獲取每個客戶的班次數據,因為 client_id 已經在班次表上。 所有你需要的是:
Shift::where('client_id', $client_id)->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.