代码之家  ›  专栏  ›  技术社区  ›  Martyn Ball

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

  •  0
  • Martyn Ball  · 技术社区  · 6 年前

    我试图运行一些额外的代码时,一行被删除使用我的模型。但是回调 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);
            });
        }
        ...
    

    static::saved 很好,我用 query 我也是。

    WebsiteRedirects::query()->create(
                [
                    'website_id' => $website->id,
                    'redirect_from' => $request->input('redirect-from'),
                    'redirect_to' => $request->input('redirect-to')
                ]
            );
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Classified    6 年前

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

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

    添加 first() WebsiteRedirect 在你跑之前 delete()

        2
  •  0
  •   N69S    6 年前

    在你的代码里

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

    就在 delete() Illuminate\Database\Eloquent\Builder 不是你的模特。它将触发雄辩删除(DB)不是你的模型之一。

        3
  •  0
  •   Ruub    6 年前

    正常情况下,你会这样做:

    $user = User::find($id);
    
    $user->delete();