Php Laravel雄辩地从范围中的另一个表访问字段

Php Laravel雄辩地从范围中的另一个表访问字段,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我有两张桌子: 用户: id、名字、姓氏、电子邮件 雇员 id,用户id,工资 用户和员工之间存在关系。当我在模型中有一个范围时,问题就出现了: public function scopeSearchPaginateAndOrder($query) { $request = app()->make('request'); return $query->whereHas('user.internal_companies', function ($company) {

我有两张桌子:

  • 用户:
  • id、名字、姓氏、电子邮件


  • 雇员
  • id,用户id,工资

    用户
    员工
    之间存在关系。当我在模型中有一个
    范围时,问题就出现了:

    public function scopeSearchPaginateAndOrder($query)
    {
        $request = app()->make('request');
    
        return $query->whereHas('user.internal_companies', function ($company) {
                $company->where('companies.id', '=', \Session::get('current_company')['id']);
            })
            ->where(function ($query) use ($request) {
            })
            ->select(['user.first_name'])
            ->get();
    }
    
    我得到以下错误:

    字段列表中的未知列“user.first_name”

    但是,这种关系确实存在:

    public function user()
    {
        return $this->belongsTo('App\User', 'user_id');
    }
    

    我认为问题可能是您的
    选择
    位置错误

    作用域的思想是为相关对象的基础查询生成器添加额外的约束

    尝试从范围功能中删除
    选择
    ,然后在应用范围后使用它。i、 e

    public function scopeSearchPaginateAndOrder($query)
    {
    
        return $query->whereHas('user.internal_companies', function ($company) {
                $company->where('companies.id', '=', \Session::get('current_company')['id']);
        });
    }
    
    $user = User::all()->searchPaginateAndOrder()->select('user.first_name')->get();
    
    有关使用全局和局部作用域的更多文档可在此处找到:


    你能试试
    ->选择('user.first\u name')
    ?嗨,很遗憾,这不起作用。基本上,如果执行
    User::all()->searchPaginateAndOrder
    操作,则表示不存在这种情况。但是,使用
    ->选择('User.first_name')
    尝试
    $User=User::searchPaginateAndOrder()->first_name,执行
    User::searchPaginateAndOrder
    工作正常,但仍显示与以前相同的错误不,不幸的是,这也不起作用!就是不回来