Php Laravel模型,未调用已删除的回调

Php Laravel模型,未调用已删除的回调,php,laravel,Php,Laravel,当使用我的模型删除一行时,我试图运行一些附加代码。但是,没有触发回调statis::deleted 控制器: /** * @param Website $website * @param Request $request * @return \Illuminate\Http\RedirectResponse * @throws \Exception */ public function delete(Website $website, Request $request) {

当使用我的模型删除一行时,我试图运行一些附加代码。但是,没有触发回调
statis::deleted

控制器:

/**
 * @param Website $website
 * @param Request $request
 * @return \Illuminate\Http\RedirectResponse
 * @throws \Exception
 */
public function delete(Website $website, Request $request)
{

    $id = $request->input('id-value');

    WebsiteRedirects::query()->where(['website_id' => $website['id'], 'id' => $id])->delete();

    Session::flash('message', [ 'is-success' => [ '1 Redirect has been deleted!' ] ]);

    return back();

}
class WebsiteRedirects extends Model
{
    protected $table = 'website_redirects';

    protected $guarded = [];

    public $timestamps = false;

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

        static::saved(function ($redirect) {
            PlannerStatus::status('redirect', $redirect->website_id, 1);
        });
        static::deleted(function($redirect) {
            dd('deleted');
            PlannerStatus::status('redirect', $redirect->website_id, 1);
        });
    }
    ...
型号:

/**
 * @param Website $website
 * @param Request $request
 * @return \Illuminate\Http\RedirectResponse
 * @throws \Exception
 */
public function delete(Website $website, Request $request)
{

    $id = $request->input('id-value');

    WebsiteRedirects::query()->where(['website_id' => $website['id'], 'id' => $id])->delete();

    Session::flash('message', [ 'is-success' => [ '1 Redirect has been deleted!' ] ]);

    return back();

}
class WebsiteRedirects extends Model
{
    protected $table = 'website_redirects';

    protected $guarded = [];

    public $timestamps = false;

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

        static::saved(function ($redirect) {
            PlannerStatus::status('redirect', $redirect->website_id, 1);
        });
        static::deleted(function($redirect) {
            dd('deleted');
            PlannerStatus::status('redirect', $redirect->website_id, 1);
        });
    }
    ...
static::saved
工作正常,我也使用
query
插入

WebsiteRedirects::query()->create(
            [
                'website_id' => $website->id,
                'redirect_from' => $request->input('redirect-from'),
                'redirect_to' => $request->input('redirect-to')
            ]
        );

未调用该事件,因为您没有通过Eloquent删除该行。您正在直接删除行,而不获取结果-因此Eloquent无法运行已删除事件

您必须在删除之前获取模型,才能触发事件

WebsiteRedirects::where(['website_id' => $website['id'], 'id' => $id])->first()->delete();

在运行
delete()

之前,添加
first()
以检索
websitereredirect
,事件未被调用,因为您没有通过Eloquent删除行。您正在直接删除行,而不获取结果-因此Eloquent无法运行已删除事件

您必须在删除之前获取模型,才能触发事件

WebsiteRedirects::where(['website_id' => $website['id'], 'id' => $id])->first()->delete();
在代码中运行
delete()

之前,添加
first()
以检索
网站重定向

WebsiteRedirects::query()->where(['website_id' => $website['id'], 'id' => $id])
就在
delete()
方法之前,对象的实例是
illumb\Database\elount\Builder
而不是您的模型。wich将触发雄辩的删除(DB),而不是您的模型。

在您的代码中

WebsiteRedirects::query()->where(['website_id' => $website['id'], 'id' => $id])

就在
delete()
方法之前,对象的实例是
illumb\Database\elount\Builder
而不是您的模型。wich将触发雄辩的删除(DB),而不是您的模型。

通常您会执行以下操作:

$user = User::find($id);

$user->delete();

通常情况下,您会执行以下操作:

$user = User::find($id);

$user->delete();

刚刚将删除行更改为
websitereirects::where(['website\u id'=>$website['id'],'id'=>$id])->delete()但它仍然不起作用。保存的
可以工作,这也使用了
query()
。谢谢,使用
websitereredirects::query()
似乎仍然可以首先工作,只需要将
第一个()
添加到末尾。我主要添加了
query()
来阻止PHPStorm喊出
非静态方法
@MartynBall Yea,这应该也可以,我相应地编辑了我的答案。很高兴它起到了作用。如果你想运行删除的事件,那么你必须循环所有事件,并对它们单独运行删除。该死,我有一种感觉,我必须这样做!谢谢。刚刚将删除行更改为
websitereirects::where(['website\u id'=>$website['id'],'id'=>$id])->delete()但它仍然不起作用。保存的
可以工作,这也使用了
query()
。谢谢,使用
websitereredirects::query()
似乎仍然可以首先工作,只需要将
第一个()
添加到末尾。我主要添加了
query()
来阻止PHPStorm喊出
非静态方法
@MartynBall Yea,这应该也可以,我相应地编辑了我的答案。很高兴它起到了作用。如果你想运行删除的事件,那么你必须循环所有事件,并对它们单独运行删除。该死,我有一种感觉,我必须这样做!谢谢