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 交互(此时它只是一个常规模型,而不是自定义枢轴)。

如果您使用从 MovieGenre 的关系,您可以简化所有这些:

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

Laravel 8.x Docs - Eloquent - Relationships - Inserting & Updating Related Models - Many to Many - Syncing Associations sync

如果您不想使用这些关系,请制作 MovieGenre 常规模型并将这些字段设置为可填写:

class MovieGenre extends Model
{
    protected $fillable = [
        'movie_id',
        'genre_id',
    ];
}