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

Php Laravel基于相同id删除关系表中的记录,php,laravel,Php,Laravel,基本上我有三个表,短信内容,短信内容城市和短信内容类别 我想从短信内容表中删除记录,通过从短信内容表中删除记录,记录应该从短信内容城市和短信内容类别表中删除 这是我的密码: $smsContentCategory = SmsContentCategories::where('sms_content_id', $id)->first(); $smsContentCategory->delete(); $smsContentCities = SmsCon

基本上我有三个表,短信内容,短信内容城市和短信内容类别

我想从短信内容表中删除记录,通过从短信内容表中删除记录,记录应该从短信内容城市和短信内容类别表中删除

这是我的密码:

$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\u content\u 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\u content\u cities
SmsContentCategories
,在删除级联条件中添加一个
,该条件将在删除父行时自动从这些子表中删除行。您可以创建两个新的迁移文件,并在每个文件中添加此约束,然后执行php artisan迁移

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

.

您可能希望在表上执行此操作。您应该在表上设置级联关系。我希望城市和类别是父级here@iJamesPHP2怎么会?不知道OP是怎么设计的,但是,假设没有短信内容,城市和类别就不会首先出现。纯粹从表名中可以看出,城市和类别是对这些内容进行分组的一种方式,所有内容都会引用一个类别和一个类别city@iJamesPHP2这实际上取决于您希望如何逻辑连接这些表。我宁愿做一个短信内容,然后添加它的城市和它的类别。总之,从OP中澄清他的DB设计是什么样子。@FaisalKhan是
sms\u内容
父表还是
sms\u内容
城市
sms\u内容
父表?@hmrneves如果可以利用这些约束,为什么要手动删除?