Модель Laravel, удаленный обратный вызов не вызывается - PullRequest
0 голосов
/ 11 октября 2018

я пытаюсь запустить дополнительный код, когда строка удаляется с помощью моей модели.Однако обратный вызов 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 ]

0 голосов
/ 11 октября 2018

В вашем коде

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

прямо перед методом delete() экземпляр объекта Illuminate\Database\Eloquent\Builder не ваша модель.который запустит Eloquent Delete (DB), а не вашу модель.

0 голосов
/ 11 октября 2018

Обычно вы делаете что-то вроде:

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

$user->delete();
0 голосов
/ 11 октября 2018

Событие не вызывается, потому что вы не удаляете строку через Eloquent.Вы удаляете строку напрямую, не извлекая результат - поэтому Eloquent не может запустить удаленное событие.

Вам нужно будет выбрать модель перед удалением для запуска события.

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

Добавить first(), чтобы получить WebsiteRedirect перед запуском delete()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...