Laravel删除触发什么都没有发生

时间:2019-03-25 16:22:54

标签: php laravel laravel-5 eloquent

我有两个有关系的模型。

因此,当要删除模型A时,所有相关的模型B也应删除。

我正在使用软删除。

这是我在模型A中的触发器:

protected static function boot()
{
    parent::boot();

    // Delete Relations
    self::deleting(function (Customer $customer) {
        $customer->contacts()->delete();
    });
}

当我删除模型A时,不会触摸B中的相关模型。所以什么也没发生。

因此触发器不起作用。我没有错误或其他问题。有谁知道我应该如何发现错误?

编辑: 关系看起来像这样:

public function contacts()
{
    return $this->hasMany(Contact::class);
}

public function customer()
{
    return $this->belongsTo(Customer::class);
}

在所有其他使用关系的情况下,它都能正常工作。

2 个答案:

答案 0 :(得分:1)

可能您需要更改查询以完成关系构建器,然后删除。更改:

$customer->contacts()->delete();

收件人:

$customer->contacts->delete();

答案 1 :(得分:0)

您必须更改迁移文件

$table->foreign('customer_id')->references('id')->on('customers')->onDelete('cascade');

您也可以在删除客户之前先删除联系人

class Customer extends Eloquent
{
    public function contacts()
    {
        return $this->has_many('Contact');
    }

    public function delete()
    {
        // delete all related contacts
        $this->contacts()->delete();

        // delete the customer
        return parent::delete();
    }
}