Eloquent 关系。更改了 table 名称

Eloquent relationship. Changed table name

我有用户 table 有 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:

  $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' 

我的 store() 方法:

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 密钥来自您的 class (User) 的名称。 laravel 所做的只是蛇形大小写并向其附加 _id。要解决您的问题,请在 User class:

上使用 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');
    }
    

考虑到您要实现的目标,我建议您选择第一个选项。