我正在使用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));
我的问题是,即使没有对数据库进行任何更改,它总是在保存用户时返回true(我从updated_at时间戳中知道这一点)。有没有办法检测是否实际使用Laravel进行了任何更改?
答案 0 :(得分: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.
Laravel模型事件
如果你不想使用任何其他东西,你可以使用Laravel模型事件(事实上Ardent正在包装钩子)。查看文档http://laravel.com/docs/eloquent#model-events
Eloquent模型可以激活几个事件,让您可以连接各种事件 使用以下方法指出模型的生命周期:创建, 创建,更新,更新,保存,保存,删除,删除, 恢复,恢复。
每当第一次保存新项目时,创建和 创建的事件将会触发。如果某个项不是新项,则保存方法为 调用,更新/更新事件将触发。在这两种情况下, 保存/保存的事件将会触发。
如果从创建,更新,保存或删除返回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!
});
答案 1 :(得分:5)
您可以查看Eloquent模型中的getDirty()
方法(model.php)。
此方法应返回已更改的属性。