我有三个相互关联的模型,一个对多个:
国家
class Country extends Model
{
protected $fillable=['name','sort'];
public $timestamps=false;
public function region(){
return $this->hasMany('App\Models\Region');
}
}
地区
class Region extends Model
{
protected $fillable=['country_id','name','sort'];
public $timestamps=false;
public function country()
{
return $this->belongsTo('App\Models\Country');
}
public function city()
{
return $this->hasMany('App\Models\City');
}
}
城市
class City extends Model
{
protected $table='cities';
protected $fillable=['region_id','name','sort'];
public $timestamps=false;
public function region()
{
return $this->belongsTo('App\Models\Region');
}
}
当我们自动删除一个国家时,需要删除其所有子项目关系,也就是删除该国家下的所有区域和城市。
我的做法是:
国家模型
public static function boot() {
parent::boot();
static::deleting(function($country) {
//remove related rows region and city
// need an alternative variation of this code
$country->region()->city()->delete();//not working
$country->region()->delete();
return true;
});
}
}
或
模型区域
public static function boot() {
parent::boot();
// this event do not working, when delete a parent(country)
static::deleting(function($region) {
dd($region);
//remove related rows city
$region->city()->delete();
return true;
});
}
}
请不要提供级联删除数据库的选项
更新
我找到了答案
使用闭包来构建查询器,以删除相关模型
国家模型
public static function boot() {
parent::boot();
static::deleting(function($country) {
//remove related rows region and city
$country->region->each(function($region) {
$region->city()->delete();
});
$country->region()->delete();//
return true;
});
}
$this->region()->city()->delete();
吗? - Kalhan.ToressModel Country
中的区域之前,尝试过先删除城市吗? - Björn$country->region()->city()->delete(); $country->region()->delete();
出现BadMethodCallException: Call to undefined method Illuminate\Database\Query\Builder::city()。 - Kamol Hakimbaev->onDelete('cascade')
。 - Mahbod Ahmadi