laravel 关系一对多

laravel relationship one to many

在此之前,非常感谢您的帮助。我有两个模型 用户:

public function posts(){
return $this->hasMany('App\Post');}

post:

public function user(){
return $this->belongsTo('App\user');}

我的 post 有列 "user_id" 所以每个 post 都有所有者 "user_id"。

这是我的问题:我想删除用户,但相关 post 没有任何反应。现在我可以做到这一点,但我的问题是 post_id 列的 ID 属于已删除的用户。我想将其更改为 "null" 或“0”。

您可以从用户模型更改函数 boot():

protected static function boot() {
  parent::boot();

  static::deleting(function($user) {
    $user->posts()->delete();
  });
}

只需确保您的 post_id 字段在您的迁移和数据库中设置为可为空。

您可以使用模型事件来做到这一点。在你的用户模型上有这样的东西。

public static function boot() {
  parent::boot();

  static::deleting(function($user) {
    $user->posts()->update(['user_id' => null]);
  });
}

还要确保 user_id 字段在迁移中可以为空。

您可以使用 SQL 功能执行此操作 - 添加一个迁移到您的 table "posts" ...

$table->foreign('user_id')
    ->references('id')->on('users')
    ->onDelete('set null');

它将创建一个外键,在删除用户行时将相关字段设置为空