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,这应该也可以,我相应地编辑了我的答案。很高兴它起到了作用。如果你想运行删除的事件,那么你必须循环所有事件,并对它们单独运行删除。该死,我有一种感觉,我必须这样做!谢谢