Php Laravel子选择与自己的表格?

Php Laravel子选择与自己的表格?,php,laravel,eloquent,Php,Laravel,Eloquent,我有以下疑问: $users = User::join('countries', 'countries.id', '=', 'users.country_id')->select([ 'users.id', 'users.promoter_id', 'users.family_name', 'users.name', ... users.u id仍然是users表中的一个id。我想在该查询中添加家族

我有以下疑问:

    $users = User::join('countries', 'countries.id', '=', 'users.country_id')->select([
        'users.id',
        'users.promoter_id',
        'users.family_name',
        'users.name',
         ...
users.u id仍然是users表中的一个id。我想在该查询中添加家族名称和发起人的名称


如何在自己的表中进行子查询

自加入场景。您可以通过创建
用户
表的别名,然后与
用户
联合来实现此目的

$users = User::join('countries', 'countries.id', '=', 'users.country_id')
                ->leftJoin('users as promoters', 'promoters.id', '=', 'users.promoter_id')->select([
        'users.id',
        'users.promoter_id',
        'users.family_name',
        'users.name',
        'promoters.family_name as promoter_family_name',
        'promoters.name as promoter_name',
        ...
另一种方法是,在
用户
模型中定义一个关系

public function promoter()
{
    return $this->belongsTo(User::class, 'promoter_id', 'id');
}
现在在controller中重写查询

$users = User::with('promoter')->join('countries', 'countries.id', '=', 'users.country_id')->select([
         ...
现在,您可以通过
$user->promotor->name,$user->promotor->family\u name
等方式访问促销员详细信息


您也可以对
国家/地区执行相同的操作,方法是定义国家/地区关系,而不是加入
用户
模型,然后加入
用户::with('promotor','Country')->……
自加入场景。您可以通过创建
用户
表的别名,然后与
用户
联合来实现此目的

$users = User::join('countries', 'countries.id', '=', 'users.country_id')
                ->leftJoin('users as promoters', 'promoters.id', '=', 'users.promoter_id')->select([
        'users.id',
        'users.promoter_id',
        'users.family_name',
        'users.name',
        'promoters.family_name as promoter_family_name',
        'promoters.name as promoter_name',
        ...
另一种方法是,在
用户
模型中定义一个关系

public function promoter()
{
    return $this->belongsTo(User::class, 'promoter_id', 'id');
}
现在在controller中重写查询

$users = User::with('promoter')->join('countries', 'countries.id', '=', 'users.country_id')->select([
         ...
现在,您可以通过
$user->promotor->name,$user->promotor->family\u name
等方式访问促销员详细信息


您也可以对
国家/地区执行同样的操作,方法是定义国家/地区关系,而不是加入
用户
模型,然后加入
用户::with('promotor','Country')->…

谢谢。我的问题是,我需要这个来查询datatables插件。所以这应该用queryOK来完成。知道了。您可以尝试一下:
$users=User::join('countries'、'countries.id'、'='、'users.country\u id')->leftJoin('users as promotors'、'promotors.id'、'='、'users.promotor\u id')->选择(['users.id','users.promotor\u id','users.family\u name','users.name','promotors.family\u name作为promotor\u name','promotors.name作为promotor\u name',…
检查更新的答案。谢谢。我的问题是,我需要它来查询datatables插件。因此应该使用queryOK.G来完成ot it.你能试试这个吗:
$users=User::join('countries'、'countries.id'、'='、'users.country\u id')->leftJoin('users as promotors'、'promotors.id'、'='、'users.promotor\u id')->选择(['users.id','users.promotor\u id','users.family\u name','users.name','promotors.family\u name作为promotor\u name',…
检查更新的答案。