为什么用另一个表中的值替换ID? Laravel属于

时间:2018-11-14 08:48:58

标签: laravel-5 laravel-nova

我有4张桌子。冠军,用户,角色和users_roles。

一名用户作为评委属于冠军。但是我只需要选择具有“法官”角色的用户。

为此,我在冠军表中创建了一个新列,称为“ main_judge”,并创建了新关系

class Championship extends Model
{
    ...
    public function mainJudge()
    {
        return $this->hasOne('App\User', 'id', 'main_judge');
    }
    ...
}

然后我添加查询一些代码

$query->join('users_roles', 'users.id',  '=', 'users_roles.user_id')
            ->join('roles', 'users_roles.role_id', '=', 'roles.id')
            ->where('roles.alias', '=', 'judge');

当我将查询打印为sql时(请参见屏幕)

http://joxi.ru/a2X45M1Sw0RpE2

然后在$ query-> get()而不是用户ID之后,我得到了一个角色ID(请参见屏幕)

http://joxi.ru/bmoxMaDs3NVoE2

1 个答案:

答案 0 :(得分:0)

我建议使用雄辩的方法,而不要使用查询生成器,因为它将消除手动定义任何联接的需要。

您应该可以执行以下操作:

$championship = Championship::find($id);

$judge = $championship->mainJudge;

如果然后dd($judge),您应该以适当的User对象结束。