2
我有三個表格:User
,Client
,Position
。工作流程如下:雄辯的關係 - 關係的關係
- A
client
創建了自己的一套positions
。 - 一個
client
添加users
它的管理,然後分配positions
他們 - 一個
user
可以屬於多個不同的clients
。
那麼這些表之間的關係是:
Client
到Position
:1對許多Position
到User
:許多一對多Client
到User
:很多多對一
因此當前LY,我的模型如下:
Class User extends Eloquent {
public function clients()
{
return $this->belongsToMany('Client');
}
public function positions()
{
return $this->belongsToMany('Position');
}
}
Class Client extends Eloquent {
public function users()
{
return $this->belongsToMany('User');
}
public function positions()
{
return $this->hasMany('Position');
}
}
// The Position model is not included, since it doesn't make sense to start from a position
所以,說一個User
屬於兩個Clients
,以及他們對這些Clients
不同Positions
。一個例子是:
- 我有兩個客戶:索尼和微軟
- 我有兩個用戶:約翰和邁克。
- 微軟擁有職位:開發人員和工程師。
- 索尼有職位:市場營銷和金融。
- John在微軟擔任開發人員。
- Mike在微軟擔任工程師,在索尼擔任財務人員。
我想讓邁克在微軟的職位只有。現在,我知道如何做到這一點的唯一方法如下:
$c_id = $Microsoft_Id;
$u_id = $Mike_Id;
Client::find($c_id)
->users()
->whereId($u_id)
->with(['positions' => function($query) use ($c_id)
{
$query->whereClientId($c_id);
}
])
->get();
有沒有我可以執行模型本身這個任務的方法嗎?如果我只想說:
Client::find($c_id)
->users()
->whereId($u_id)
->with('positions')
->get();
而且檢查在模型本身內執行。
當您再次使用3個模型之間的m-m關係時,這是有意義的。看起來你不能查詢'用戶'''位置'沒有'客戶'的上下文,沒有解釋它? –
是的,但由於我已經用'$ c_id'和'$ u_id'查詢了它,我試圖從關係中的'$ this'訪問這些信息,然後限制返回的值。 – Kousha
用戶可以在一個客戶端上擁有多個職位? –