Laravel 8 eloquent 创建 sql 查询时缺少 1 个字段
Laravel 8 eloquent missing 1 field while creating a sql query
我遇到了 eloquent 的问题,我的控制器有这样的代码
$pivot = MovieGenre::where('movie_id', $id)->delete();
if($request->input('genres')){
foreach ($request->input('genres') as $genre) {
$pivot = MovieGenre::create([
'movie_id' => $id,
'genre_id' => $genre,
]);
}
}
例如,还有 2 个相同的枢轴在工作,枢轴相同,控制器的制作方式相同
当我尝试使用它时出现错误
此查询在查询中缺少 'genre_id',但我在数据透视模型的 CREATE 方法中提供了此字段。
模型文件为空。只是 'extends Pivot'
您在这里没有使用从 Movie
模型到 Genre
模型的关系。您正在直接与枢轴 table 交互(此时它只是一个常规模型,而不是自定义枢轴)。
如果您使用从 Movie
到 Genre
的关系,您可以简化所有这些:
class Movie extends Model
{
public function genres()
{
// convention would name the table genre_movie
return $this->belongsToMany(Genre::class, 'movie_genre')->withTimestamps();
}
}
Movie::findOrFail($id)->genres()->sync((array) $request->input('genres'));
Laravel 8.x Docs - Eloquent - Relationships - Many to Many - Retrieving Intermediate Table Columns withTimestamps
如果您不想使用这些关系,请制作 MovieGenre
常规模型并将这些字段设置为可填写:
class MovieGenre extends Model
{
protected $fillable = [
'movie_id',
'genre_id',
];
}
我遇到了 eloquent 的问题,我的控制器有这样的代码
$pivot = MovieGenre::where('movie_id', $id)->delete();
if($request->input('genres')){
foreach ($request->input('genres') as $genre) {
$pivot = MovieGenre::create([
'movie_id' => $id,
'genre_id' => $genre,
]);
}
}
例如,还有 2 个相同的枢轴在工作,枢轴相同,控制器的制作方式相同
当我尝试使用它时出现错误
此查询在查询中缺少 'genre_id',但我在数据透视模型的 CREATE 方法中提供了此字段。 模型文件为空。只是 'extends Pivot'
您在这里没有使用从 Movie
模型到 Genre
模型的关系。您正在直接与枢轴 table 交互(此时它只是一个常规模型,而不是自定义枢轴)。
如果您使用从 Movie
到 Genre
的关系,您可以简化所有这些:
class Movie extends Model
{
public function genres()
{
// convention would name the table genre_movie
return $this->belongsToMany(Genre::class, 'movie_genre')->withTimestamps();
}
}
Movie::findOrFail($id)->genres()->sync((array) $request->input('genres'));
Laravel 8.x Docs - Eloquent - Relationships - Many to Many - Retrieving Intermediate Table Columns withTimestamps
如果您不想使用这些关系,请制作 MovieGenre
常规模型并将这些字段设置为可填写:
class MovieGenre extends Model
{
protected $fillable = [
'movie_id',
'genre_id',
];
}