laravel 中无法获取关系数据

Posted

技术标签:

【中文标题】laravel 中无法获取关系数据【英文标题】:cannot get the relationship data in laravel 【发布时间】:2020-06-03 03:59:45 【问题描述】:

这是我的功能

public function show($id)
    
        $newproject = Newproject::find($id);
        $data = [

            'name' => $newproject->user->name
        ];

        return $data;
    

新项目模型

public function user()
    
        return $this->hasOne(User::class,'user_id' ,'id');
    

总是报错

message: "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.user_id' in 'where clause' (SQL: select * from `users` where `users`.`user_id` = 1 and `users`.`user_id` is not null limit 1)"
exception: "Illuminate\Database\QueryException"
file: "C:\xampp\htdocs\larastart\vendor\laravel\framework\src\Illuminate\Database\Connection.php"
line: 669

请帮我解决我的问题。

【问题讨论】:

你可以发布用户和新项目的专栏吗? 请分享您的表结构 我认为 Newproject 属于 User 更有意义,那么您将需要 newprojects 表中的 user_id 列。 【参考方案1】:

检查关系one-to-one reference foreign_key user_id 在 newprojects 表中,你需要建立这样的关系:

用户模型:

public function newproject()

   return $this->hasOne(Newproject::class,'user_id');

新项目模型:

public function user()

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

【讨论】:

【参考方案2】:

我觉得应该是这样的,

public function user()
    
        return $this->hasOne(User::class,'id' ,'user_id');
    

这意味着用户表的id 与当前模型的user_id 列匹配。如果您根据 laravel 有正确的命名约定,那么您不需要传递这个额外的参数。

Laravel hasOne relation

希望对你有帮助:)

【讨论】:

【参考方案3】:

在我的模型中发现问题

在用户模型中

public function newproject()
    
        return $this->belongsTo(Newproject::class,'user_id','id');
    

在新项目模型中

public function user()
    
        return $this->hasOne(User::class,'id' , 'user_id');
    

谢谢大家

【讨论】:

以上是关于laravel 中无法获取关系数据的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Laravel Eloquent 关系中获取数据

无法在工匠自定义命令 Laravel 5.4 中获取模型关系

groupBy 在 laravel 中具有雄辩的关系

功能无法加载有很多关系数据 laravel Model Eloquent

从关系中获取数据,Laravel

无法在 Laravel 4 中检索一对多关系