雄辩的关系.更改了表名


Eloquent relationship. Changed table name

我有带有id的用户表。
我的项目模型有$fillable字段:

  protected $fillable = [
    'title',
    'description',
    'visibility_level',
    'creator_id'
  ];

关系:

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

在用户模型关系中:

  public function projects()
  {
    return $this->hasMany('App'Project');
  }

现在creator_id指的是user_id。我已经设置了我的项目模型表:

  $table->foreign('creator_id')->references('id')->on('users')
    ->onUpdate('cascade')->onDelete('cascade');

但是后来我尝试存储数据,它仍然尝试添加user_id:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_id' in 'field list' 

我的商店()方法:

public function store(ProjectRequest $request)
{
$project = new Project($request->all());
Auth::user()->projects()->save($project);
flash()->success('Project have been created');
return redirect('news/');
}

我搜索的地方错误还是什么?我不明白为什么它的"user_id"这个"user_id"生成的名称从何而来?

user_id 键来自类的名称 ( User )。拉拉维尔所做的只是蛇箱并附加_id。要解决您的问题,请在User类上使用第二个可选参数来hasMany

public function projects()
{
    return $this->hasMany('App'Project', 'creator_id');
}

这应该可以解决您的问题,但是,要从另一个方向使用关系,您还需要对Project模型进行一些更改。您有两种选择:

  1. 重命名您的关系方法:

    public function creator()
    {
        return $this->belongsTo('App'User');
    }
    
  2. 通过将密钥作为第二个参数传递给 belongsTo 来覆盖密钥:

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

鉴于您要实现的目标,我建议您选择第一个选项。