Kar*_*arl 14 php laravel eloquent laravel-4
我正在使用Laravel 4框架,我正试图找出一种方法来显示通知,具体取决于是否save()成功.这是我到目前为止所拥有的:
if($user->save()) {
Session::flash('success','woohoo success');
} else {
Session::flash('error','uhoh error');
}
return Redirect::action('UsersController@show', array('users' => $id));
Run Code Online (Sandbox Code Playgroud)
我的问题是,即使没有对数据库进行任何更改,它总是在保存用户时返回true(我从updated_at时间戳中知道这一点).有没有办法检测是否实际使用Laravel进行了任何更改?
Gad*_*oma 28
根据您想要实现的目标,您可以在此处选择一些选项.请先查看以下内容.
带有Ardent包的模型挂钩
如果您对autovalidating模型感兴趣,请查看https://github.com/laravelbook/ardent包 - 用于Laravel Framework 4的Eloquent O/RM的自我验证智能模型.除了强大的验证功能外,它还提供了您可以使用的其他模型钩子:
Here's the complete list of available hooks:
before/afterCreate()
before/afterSave()
before/afterUpdate()
before/afterDelete()
before/afterValidate() - when returning false will halt validation, thus making save() operations fail as well since the validation was a failure.
Run Code Online (Sandbox Code Playgroud)
Laravel模型事件
如果你不想使用任何其他东西,你可以使用Laravel模型事件(事实上Ardent正在包装钩子).查看文档http://laravel.com/docs/eloquent#model-events
Eloquent模型可以触发多个事件,允许您使用以下方法挂钩模型生命周期中的各个点:创建,创建,更新,更新,保存,保存,删除,删除,恢复,恢复.
每当第一次保存新项目时,将触发创建和创建的事件.如果某个项不是新项并且调用了save方法,则会触发更新/更新的事件.在这两种情况下,保存/保存的事件都将触发.
如果从创建,更新,保存或删除事件返回false,则操作将被取消:
解决方案
最后,向您提出疑问,您可以通过多种方式利用上述方法,但最明显的是,您可以将它(或不是)与Eloquent Models的getDirty()api docs here方法结合起来.例如,它将与保存事件一起使用.
Yourmodel::saving(function($model)
{
foreach($model->getDirty() as $attribute => $value){
$original= $model->getOriginal($attribute);
echo "Changed $attribute from '$original' to '$value'<br/>\r\n";
}
return true; //if false the model wont save!
});
Run Code Online (Sandbox Code Playgroud)