保存时检测更改 Laravel 4:Eloquent

2024-02-26

我正在使用 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 检测是否实际进行了任何更改?


根据您想要实现的目标,您在这里有一些选择。首先查看以下内容。

带 Ardent 包装的模型挂钩
如果您对自动验证模型感兴趣,请查看https://github.com/laravelbook/ardent https://github.com/laravelbook/ardentpackage -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 http://laravel.com/docs/eloquent#model-events

Eloquent 模型会触发多个事件,让您能够挂钩各种事件 使用以下方法在模型的生命周期中指定点:创建、 创建、更新、更新、保存、保存、删除、删除、 恢复,恢复。

每当第一次保存新项目时,创建和 创建的事件将会触发。如果项目不是新的并且保存方法是 调用时,将触发更新/更新事件。在这两种情况下, 保存/保存的事件将会触发。

如果创建、更新、保存、删除返回 false 事件,操作将被取消:

Solution
最后,针对您的问题,您可以通过多种方式利用上述方法,但最明显的是您可以将其与雄辩模型结合(或不结合)弄脏() API 文档在这里 http://laravel.com/api/source-class-Illuminate.Database.Eloquent.Model.html#2149-2167方法。例如,它将与保存事件一起使用。

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! 
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保存时检测更改 Laravel 4:Eloquent 的相关文章

  • 搜索引擎如何找到相关内容? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Google 在解析网络时如何找到相关内容 例如 Google 使用 PHP 原生 DOM 库来解析内
  • 重定向而不改变url

    我总是不喜欢 htaccess 我正在尝试建立一个所有请求都通过index php 的网站 但我希望URL 类似于www sample com home 该网址实际上会加载 www sample com index php page hom
  • 单词之间没有空格的语言(例如亚洲语言)中的断词?

    我想让 MySQL 全文搜索适用于日语和中文文本以及任何其他语言 问题在于这些语言以及可能其他语言通常在单词之间没有空格 当您必须键入与文本中相同的句子时 搜索没有用 我不能只在每个字符之间添加空格 因为英语也必须有效 我想用 PHP 或
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • FPDI/FPDF:水印和打印多页

    我修改了这个堆栈问题 当用户尝试下载文件时在 pdf 文件上应用水印 https stackoverflow com questions 3983432 applying watermarks on pdf files when users
  • 如何在响应ajax codeigniter后停止执行其他控制器

    我想知道如何在响应输出 json 数据后停止执行函数和涉及的其他控制器 就我这里的情况而言 我只是打电话test 函数于dashboard控制器 In dashboard构造函数将执行MY Login library In MY Login
  • PHP严格标准:声明应该兼容

    我有以下类层次结构 class O Base class O extends O Base abstract class A Abstract public function save O Base obj class A extends
  • 如何使用 php 下载/打印页面的特定部分

    我有一个 HTML 页面如下 Lorem Ipsum is simply dummy text of the printing and typesetting industry Lorem Ipsum has been the indust
  • 为什么我需要结束 ob_start()?

    php 文档建议我应该用 ob end flush 结束每个 ob start 我在网站的每个页面上使用一个 只是为了允许我在应用程序中的任何位置使用 firephp 日志方法 该应用程序运行良好 但我想知道是否有任何我不知道的东西可能有害
  • PHP 脚本可以在终端中运行,但不能在浏览器中运行

    我正在尝试执行exec命令 但我遇到了问题 当我运行以下代码时 当我通过浏览器运行它时它不起作用 但如果我把输出 str将其复制并粘贴到终端中 它工作得很好 造成这种情况的原因是什么 我该如何解决 目前我正在运行localhost php
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • php 错误 fopen(): 文件名不能为空

    发送带有附件代码的电子邮件工作正常 最近我们已将文件传输到另一个托管服务器 idk 发生了什么 它显示以下错误 警告 fopen 第 106 行 home hugerecruitmetnt public html validatecva p
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 如何在 Laravel 中使用 PUT http 动词提交表单

    我知道这个问题可能已经提出 但我就是无法让它发挥作用 如果有人可以帮助我 我将非常感激 我安装了 colletive form 但答案也可以是 html 表单标签 现在列出我的表格 我的路线和我的例外情况 Form model array
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一

随机推荐

  • 您可以使用 JavaScript 将多个图像合并为一个图像吗?

    我想知道是否有一种方法可以仅使用 JavaScript 将多个图像组合成单个图像 这是 Canvas 能够做到的吗 效果可以通过定位来完成 但是可以将它们组合成单个图像进行下载吗 2008 年 10 月 1 日更新 感谢您的建议 我正在帮助
  • 使用 UIViewAnimationOptionTransitionCurlDown 自定义 Segue

    我想创建一个自定义 Segue 来用卷曲动画交换 ViewController 但我找不到方法 void 执行此操作会是什么 我有这个 void perform UIViewController dst self destinationVi
  • 为什么 AudioRecord.getMinBufferSize 返回 ERROR_BAD_VALUE (-2)?

    我正在 Samsung Galaxy S i9000 上对此进行测试 int sampleRate 44100 int bufferSize AudioRecord getMinBufferSize sampleRate AudioForm
  • JSON-lib 转义/保留字符串

    我正在使用 Java 的 JSON lib 库http json lib sourceforge net http json lib sourceforge net 我只想添加看起来像 JSON 的简单字符串 但我不希望库自动找出它可能是
  • 使用“全选”时排除禁用的复选框

    我在表中有带有标签的复选框 我在表 全选 之外添加了一个复选框 ID 为 chkbox 现在下面的代码工作正常 这是 选择和取消选择表中的所有复选框 现在有一些页面由于业务逻辑而禁用了一些复选框 我希望这些复选框不应该受到影响
  • Java 创建一个新文件,或者覆盖现有文件

    我想要实现的是创建一个文件 无论该文件是否存在 我尝试使用File createNewFile 但这只会创建该文件 如果该文件尚不存在 我应该使用File delete 进而File createNewFile 或者有更清晰的方法吗 Fil
  • 如何让工具提示在 IE 中显示时间更长

    我得到以下内容 span title 在 Firefox 中 工具提示会一直停留在那里 直到鼠标移动 但在 IS 中 它只停留大约 5 秒 然后消失 有没有办法让它持续更久 没有内置的浏览器工具提示 不 有大量类似工具提示的 UI 组件使用
  • 关于jsp源代码

    我开发了一个非常大的 Web 应用程序 如果我需要在 JSP 页面中进行任何更改 则需要花费太多时间来查找 JSP 页面 链接 操作等 那么 是否有任何工具或技术可以让我直接获取该特定 JSP 页面的代码 我认为 查看来源 是不同的 它只显
  • Hibernate:无法反序列化 - 无效的流标头

    关于如何解决此错误有什么想法吗 我将 Spring JPA 与 Hibernate 一起使用 下面是必要的详细信息 实体类别1 Entity Table name ways TypeDef name hstore typeClass Hst
  • 如何在 Android 的 TabLayout 中使选项卡标题向左对齐

    我似乎无法在 TabLayout 内将选项卡标题向左对齐 目前 标题居中 这是什么I want https i stack imgur com Vy6FP jpg实现 这就是I have https i stack imgur com FY
  • 从 c# 中的 app.config 获取 ConnectionString [重复]

    这个问题在这里已经有答案了 我已经在 app config 文件中定义了我的连接字符串
  • WPF 以编程方式实例化用户控件以将其呈现为 PNG

    我想在 DLL 中以编程方式实例化用户控件 然后将其保存为 PNG 文件 这对于PngBitmapEncoder和RenderTargetBitmap来说一般是没有问题的 这是我的问题 如何实例化该控件 简单地使用 new operator
  • Pandas 将零替换为最接近的平均非零值

    我有一个数据框 df pd DataFrame A 0 0 15 0 0 12 0 0 0 5 我想用最接近的非零值替换 0 值 比如第一个值是0 那么我发现最接近的非零值是15 所以我把它替换为15 那么数据就变成了 15 0 15 0
  • 即使存在未设置为 true,Rails 验证也需要数字

    我正在尝试保存一条没有设置字段的记录 该记录在模型中具有验证数值 即使验证中不需要存在 它仍然会抛出该字段不是数字的错误 验证 validates network id numericality gt true 保存模型的代码 networ
  • 在实现 ArrayAccess 和 Iterator 的对象上使用 foreach

    有没有办法迭代实现 ArrayAccess 和 Iterator 接口的对象的键 数组访问很有魅力 但我不能在那些对象上使用 foreach 这对我有很大帮助 是否可以 到目前为止我有这样的代码
  • 如何使用 xdist 和 django_coverage_plugin 并行 pytest 运行覆盖率报告

    使用以下设置 计算出的覆盖率小于使用没有并行化的单线程的覆盖率 Coverage 仅在项目根目录中创建 1 个覆盖文件 我预计这就是问题所在 我无法确定我做错了什么 报告的覆盖范围比我简单地运行要少coverage m pytest 在单线
  • 如何使用 Gmail API 访问我拥有的 Gmail 帐户?

    我想将节点脚本作为 cronjob 运行 它使用 Gmail 的 API 来轮询我拥有的 Gmail 帐户 我正在关注这些快速入门说明 https developers google com gmail api quickstart nod
  • JTabbedPane:选项卡左侧的图标

    你好 我正在使用 nimbus 外观和感觉 并有一个带有图标和文本的选项卡窗格 现在图标出现在文本的右侧 而我想将其放在左侧 我还想在图标和文本之间添加一些间距 thanks tab组件需要自己设置 它控制选项卡标题的呈现方式 Create
  • 如何以编程方式录制IOS屏幕

    有没有办法以编程方式录制 IOS 屏幕 意味着您正在执行的任何活动 例如单击按钮 滚动表格视图 即使正在播放的视频会与其他活动一起再次捕获 尝试过这些 https www raywenderlich com 30200 avfoundati
  • 保存时检测更改 Laravel 4:Eloquent

    我正在使用 Laravel 4 框架 我正在尝试找出一种方法来显示通知 具体取决于是否save 成功与否 这是我到目前为止所拥有的 if user gt save Session flash success woohoo success e