Laravel - 有许多自我通过

时间:2016-12-07 16:30:29

标签: php mysql laravel

我有两个模型,UserAppointment。用户可以拥有也是用户的客户。这些客户在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');
}

唉,它并没有让我得到我正在寻找的东西。我应该制作自己的查询吗?

1 个答案:

答案 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.