Laravel:调用未定义的方法 Illuminate\\Database\\Query\\Builder

Posted

技术标签:

【中文标题】Laravel:调用未定义的方法 Illuminate\\\\Database\\\\Query\\\\Builder【英文标题】:Laravel : Call to undefined method Illuminate\\Database\\Query\\BuilderLaravel:调用未定义的方法 Illuminate\\Database\\Query\\Builder 【发布时间】:2018-10-03 01:52:23 【问题描述】:

查询时使用 undefine 方法获取错误。只是我想从两个表中获取数据查询看看链接

  public static function userDetail($id)


    $result = User::whereHas('user_details', function ($query) 
        $query->where('user_details.user_id',$id);
    )->first();


    return $result ;

关系

在模型User定义关系

public function userDetails()

   return $this->hasOne(UserDetails::class);

userDetails 模型中

public function user()
    
        return $this->belongsTo(User::class);
    

【问题讨论】:

'user_details' 应该是 userDetails in whereHas 您还需要在此处添加use($id)function ($query) use ($id) 【参考方案1】:

只是改变

public static function userDetail($id)


$result = User::whereHas('user_details', function ($query) use($id) 
    $query->where('user_id',$id);
)->first();


return $result ;

【讨论】:

` "SQLSTATE[42S22]: 找不到列:1054 'where 子句'中的未知列 'userDetails.user_id' (SQL: select * from users where exists (select * from user_details其中users.id = user_details.user_iduserDetails.user_id = 2) 限制 1)",` 这意味着您的userDetails 表中的user_id 列不存在。 如果可行,请接受答案并投票。 @Javed【参考方案2】:

如果你不需要使用 static,你可以在 userDetails 上使用这个 $result 值

public function userDetail($id)

        $result = userDetails::where('user_id', '=', $id)->first();

        return $result ;

然后结果可以通过使用$value->user->user property从vale获取用户的访问权限

【讨论】:

以上是关于Laravel:调用未定义的方法 Illuminate\\Database\\Query\\Builder的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:调用未定义的方法 Illuminate\\Database\\Query\\Builder

Laravel - ORM - 调用未定义的方法

Laravel 5:调用未定义的方法 Illuminate\Database\Eloquent\Collection::exists()

调用未定义的方法 App\Models\Car::setCreatedAt() - Laravel - 5.8.16

调用未定义的方法 Gallery::newQuery() Laravel

Laravel - 调用未定义的方法 TrainingFacade::save()