我试图阻止模型保存到数据库,如果它在属性中具有特定值。
内部服务提供商:
public function register()
{
$this->registerSaveRelated();
$this->registerEvents();
}
public function registerEvents()
{
$app = $this->app;
$app['events']->listen('eloquent.saving*', function ($model) use ($app) {
$app['my_service']->checkModel($model);
});
}
public function registerSaveRelated(){
// More code...
正如预期的那样, checkModel($model)
被解雇了。但是,如果我返回false,则没有任何反应。该模型继续保存。这样做的正确方法是什么?
需要在包中完成,而不是模型。所以Model :: saving()不是一个选项。
答案 0 :(得分:0)
我能想到两种解决方案。
一个。使用Model::saving()
并使用布尔值或其他简单逻辑区分包。
B中。覆盖save方法并将逻辑放在该函数中。
答案 1 :(得分:0)
我认为你走在正确的轨道上。你是正确的checkModel
需要返回true或false。然而,重要的部分是传递给listen
的闭包返回的内容。这就决定了它是否存储。现在它没有返回任何东西。尝试添加return
,如下所示:
public function registerEvents()
{
$app = $this->app;
$app['events']->listen('eloquent.saving*', function ($model) use ($app) {
return $app['my_service']->checkModel($model);
});
}