Laravel同时删除两个相关表
Laravel delete in two related tables in the same time
我正在尝试删除两个相互关联的 table 中的数据。因此,当我删除 websites table 中的一行时,我还想删除 keywords table 中的行与外键相关
网站
编号 |站点名称
1 |示例
关键字
编号 | website_id | kwName
1 | 1
所以当我删除一个网站时,具有相同id(website_id作为外键)的行不会被删除。
我的删除代码是:
控制器
public function destroy($id)
{
$projects = Website::findOrFail($id);
$projects->delete();
return redirect()->route('projects.index')->with('alert-success','Data Has been Deleted!');
}
Blade
@foreach($projectss as $projects)
<tr>
<td>{{$no++}}</td>
<td>{{$projects->siteName}}</td>
<td>{{$projects->siteUrl}}</td>
<td>
<form class="" action="{{route('projects.destroy',$projects->id)}}" method="post" enctype="multipart/form-data">
<input type="hidden" name="_method" value="delete">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<a href="{{route('projects.show',$projects->id)}}" class="btn btn-success">View</a>
<a href="{{route('projects.edit',$projects->id)}}" class="btn btn-primary">Edit</a>
<input type="submit" class="btn btn-danger" onclick="return confirm('Are you sure to delete this data');" name="name" value="delete">
</form>
</td>
</tr>
@endforeach
型号Keyword.php
public function website() {
return $this->belongsTo('App\Website');
}
型号Website.php
public function keywords() {
return $this->hasMany('App\Keyword');
}
一种快速方法,您可以利用我们绑定到您的 Website
模型中的 boot
函数,然后捕获 deleted
事件,它为您提供了一个模型实例作为第一个参数 ($website)
.
被删除
这是一个例子:
public static function boot()
{
parent::boot();
static::deleted(function($website){
$website->keywords()->delete();
});
}
最好的实现方式是在定义外键约束时使用onDelete('cascade')
:
$table->foreign('website_id')->references('id')->on('websites')->onDelete('cascade');
因此,当您删除网站时,所有与该网站相关的关键字都会被自动删除。
https://laravel.com/docs/5.4/migrations#foreign-key-constraints
我正在尝试删除两个相互关联的 table 中的数据。因此,当我删除 websites table 中的一行时,我还想删除 keywords table 中的行与外键相关
网站
编号 |站点名称
1 |示例
关键字
编号 | website_id | kwName
1 | 1
所以当我删除一个网站时,具有相同id(website_id作为外键)的行不会被删除。
我的删除代码是:
控制器
public function destroy($id)
{
$projects = Website::findOrFail($id);
$projects->delete();
return redirect()->route('projects.index')->with('alert-success','Data Has been Deleted!');
}
Blade
@foreach($projectss as $projects)
<tr>
<td>{{$no++}}</td>
<td>{{$projects->siteName}}</td>
<td>{{$projects->siteUrl}}</td>
<td>
<form class="" action="{{route('projects.destroy',$projects->id)}}" method="post" enctype="multipart/form-data">
<input type="hidden" name="_method" value="delete">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<a href="{{route('projects.show',$projects->id)}}" class="btn btn-success">View</a>
<a href="{{route('projects.edit',$projects->id)}}" class="btn btn-primary">Edit</a>
<input type="submit" class="btn btn-danger" onclick="return confirm('Are you sure to delete this data');" name="name" value="delete">
</form>
</td>
</tr>
@endforeach
型号Keyword.php
public function website() {
return $this->belongsTo('App\Website');
}
型号Website.php
public function keywords() {
return $this->hasMany('App\Keyword');
}
一种快速方法,您可以利用我们绑定到您的 Website
模型中的 boot
函数,然后捕获 deleted
事件,它为您提供了一个模型实例作为第一个参数 ($website)
.
这是一个例子:
public static function boot()
{
parent::boot();
static::deleted(function($website){
$website->keywords()->delete();
});
}
最好的实现方式是在定义外键约束时使用onDelete('cascade')
:
$table->foreign('website_id')->references('id')->on('websites')->onDelete('cascade');
因此,当您删除网站时,所有与该网站相关的关键字都会被自动删除。
https://laravel.com/docs/5.4/migrations#foreign-key-constraints