【发布时间】:2015-04-13 17:28:07
【问题描述】:
我有一个多对多的关系。枢轴模型有很多孩子。当我在多对多上调用分离时,我还需要删除枢轴模型的孩子。我想使用 onDelete('cascade'),但这似乎不起作用。我也试过这个:http://laravel-tricks.com/tricks/using-model-events-to-delete-related-items,但这似乎也不起作用。两者都不起作用可能是因为没有触发销毁事件。
当我调用 detach 时如何让孩子们删除有什么想法吗?
这是我的一些代码,以防我犯了错误:
我的支点模型:
Schema::create('beer_distributions', function(Blueprint $table)
{
$table->increments('id');
$table->integer('beer_id');
$table->integer('distributor_id');
枢轴模型的孩子:
Schema::create('kegs', function(Blueprint $table)
{
$table->increments('id');
$table->integer('beer_distribution_id');
$table->dropForeign('kegs_beer_distribution_id_foreign');
$table->foreign('beer_distribution_id')
->references('id')
->on('beer_distributions')
->onDelete('cascade');
我不知道是否有办法挽救这种方法。我打电话给同步,然后试图删除孩子,没有意识到父母已经走了,让孩子无法访问。:
$attachments = $beer->distributors()->sync(Input::get('distributors'));
foreach ($attachments['detached'] as $distributor_id) {
BeerDistribution::where('beer_id', '=', $id)
->where('distributor_id', '=', $distributor_id)->first()->destroy();
}
更新: 需要明确的是,我有四个正在使用的模型。啤酒与经销商具有多对多关系。枢轴模型 BeerDistributions 有许多桶。当我调用 sync 来更新啤酒经销商时,BeerDistributions 会自动删除,我希望同时删除小桶。
这是我的一些模型:
class Beer extends Eloquent {
public function distributors()
{
return $this->belongsToMany('Distributor', 'beer_distributions');
}
Beer ^ manyToMany with Distributor:
class Distributor extends Eloquent {
public function beers()
{
return $this->belongsToMany('Beer', 'beer_distributions');
}
枢轴模型...
class BeerDistribution extends Eloquent {
public function kegs()
{
return $this->hasMany('Keg', 'beer_distribution_id');
}
有很多小桶:
class Keg extends Eloquent {
public function beerDistribution()
{
return $this->belongsTo('BeerDistribution');
}
【问题讨论】: