環境
Laravel v9.5.1 (PHP v8.1.3)
前提
中間テーブルのidやcreated_atに値が入らない状態で、updated_atには値を入れたくない(カラムが存在しないため)とき
解決法
各モデルでリレーションを定義するとき、withPivot
で渡したいカラムを入れる。
これでcreated_at
がちゃんと保存されるようになる。
# group model
public function userGroups(): BelongsToMany
{
return $this->belongsToMany(UserGroup::class)
->withPivot('id', 'group_id', 'user_id', 'user_group_id', 'created_at');
}
# user model
public function userGroups(): BelongsToMany
{
return $this->belongsToMany(UserGroup::class)
->withPivot('id', 'user_group_id', 'group_id', 'user_id', 'created_at');
}
# user-group model
public function users(): BelongsToMany
{
return $this->belongsToMany(User::class)->withPivot('id', 'group_id', 'user_id', 'user_group_id');
}
public function groups(): BelongsToMany
{
return $this->belongsToMany(Group::class)->withPivot('id', 'group_id', 'user_id', 'user_group_id');
}
ちなみに
created_at
updated_at
両方とも値を持たせたい場合は下記でオッケー。
return $this->belongsToMany(User::class)->withTimestamps();
参考