我有两个模型,User
和Appointment
。用户可以拥有也是用户的客户。这些客户在client_id
下的约会中被引用:
约会表如下所示:
Appointment
id|user_id|client_id
我想拉取每个用户的所有客户端(唯一身份用户),但很难制定关系(hasManyThrough - 用户通过约会有很多用户(客户))。
根据我对Laravel文档的理解,以下内容应该有效:
User.php
public function clients()
{
return $this->hasManyThrough('App\User', 'App\Appointment', 'client_id', 'user_id', 'id');
}
-
Appointment.php
public function user()
{
return $this->belongsTo('App\User');
}
public function client()
{
return $this->belongsTo('App\User', 'client_id');
}
唉,它并没有让我得到我正在寻找的东西。我应该制作自己的查询吗?
答案 0 :(得分:1)
这有点棘手。文档Has Many Through
示例是级联式结构,它告诉我这种类型的关系不适用于您的情况(但是有很多未记录的事情,所以也可能)。
如果您不想处理无证件的案件,我建议以下关系:
<强> user.php的强>
public function appointmentsInWhichIsProvider()
{
return $this->hasMany('App\Appointment');
}
public function appointmentsInWhichIsClient()
{
return $this->hasMany('App\Appointment', 'client_id');
}
<强> Appointment.php 强>
public function user()
{
return $this->belongsTo('App\User');
}
public function client()
{
return $this->belongsTo('App\User', 'client_id');
}
如果你想得到一个用户的所有客户,你可以做这样的事情(根本不是很好,但应该这样做):
$user = User::find(1);
$userClients = [];
foreach ($user->appointmentsInWhichIsProvider as $appointment) {
array_push($userClients, $appointment->client);
}
var_dump($userClients) // Collection containing all the user clients.