Laravel删除关系表中基于相同id的记录



基本上我有三个表,sms_content、sms_content_cities和sms_content_categories。

我想从sms_content表删除记录,通过从sms_content表删除记录应该从sms_content_cities和sms_content_categories表删除记录。

这是我的代码:

$smsContentCategory = SmsContentCategories::where('sms_content_id', $id)->first();
$smsContentCategory->delete();
$smsContentCities = SmsContentCity::where('sms_content_id', $id)->first();
foreach ($smsContentCities as $city){
if(!empty($city)){
$city->delete();
}
}
$model = SmsContent::find($id);
$model->delete();

我正在使用单一类别和多个城市。

如何删除相关记录。

SmsContentCategories::where('sms_content_id', $id)->delete();
SmsContentCity::where('sms_content_id', $id)->delete();
SmsContent::where('id', $id)->delete();

您不需要使用foreach。

SmsContentCategories::where('sms_content_id', $id)->delete();
SmsContentCity::where('sms_content_id', $id)->delete();
SmsContent::find($id)->delete();

只删除父模型。

SmsContent::find($id)->delete();

对于子表sms_content_citiesSmsContentCategories,添加ON DELETE CASCADE条件,该条件将在父行被删除时自动从这些子表中删除行。您可以创建两个新的迁移文件,并在每个文件中添加此约束,然后执行php手工迁移

$table->foreign('sms_content_id')->references('id')->on('sms_content')->onDelete('cascade');

Laravel文档用于删除级联。

最新更新