laravel关系一对多

时间:2017-03-09 15:27:03

标签: laravel relationships

在任何事情发生之前,请提前获得帮助。我有两个模特 用户:

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

后:

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

我的帖子有“user_id”列,所以每个帖子都有“user_id”所有者。

这是我的问题:我想删除用户,但相关帖子没有任何变化。现在我可以这样做,但我的问题是post_id列有id属于已删除的用户。我想将其更改为“null”或“0”。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您可以使用模型事件执行此操作。您的用户模型上有类似的内容。

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

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

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

答案 2 :(得分:2)

您可以使用SQL功能执行此操作 - 向您的表添加迁移"帖子" ...

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

它将创建一个外键,在删除用户行

时将null设置为相关字段

答案 3 :(得分:1)

您可以从用户模型更改功能boot():

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

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