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');
它将创建一个外键,在删除用户行时将相关字段设置为空
在此之前,非常感谢您的帮助。我有两个模型 用户:
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');
它将创建一个外键,在删除用户行时将相关字段设置为空