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
模型进行一些更改。您有两个选择:
重命名你的关系方法:
public function creator()
{
return $this->belongsTo('App\User');
}
通过将密钥作为第二个参数传递给 belongsTo
来覆盖密钥:
public function user()
{
return $this->belongsTo('App\User', 'creator_id');
}
考虑到您要实现的目标,我建议您选择第一个选项。
我有用户 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
模型进行一些更改。您有两个选择:
重命名你的关系方法:
public function creator() { return $this->belongsTo('App\User'); }
通过将密钥作为第二个参数传递给
belongsTo
来覆盖密钥:public function user() { return $this->belongsTo('App\User', 'creator_id'); }
考虑到您要实现的目标,我建议您选择第一个选项。