从数据库检索 Eloquent 模型时执行代码

2024-01-03

我有一个雄辩的模型。每当从数据库中检索它时,我想检查是否满足条件并在满足情况下设置模型属性。

编辑:我最初认为restoring事件将是放置相关逻辑的正确位置,但正如泰勒·克朗普顿(Tyler Crompton)在下面指出的那样,restoring在恢复软删除记录之前触发。


您有两个有效的选择:

  • 你可以子类化\Illuminate\Datebase\Eloquent\Model https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Eloquent/Model.php添加这样的事件。
  • 您可以修改您的副本\Illuminate\Datebase\Eloquent\Model https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Eloquent/Model.php添加此(并可能发送(未经请求的)拉取请求到GitHub 上的 Laravel https://github.com/laravel/framework)。根据第1685期 https://github.com/laravel/framework/issues/1685,看来他们不想要它。

如果我是你,我会选择第一个选项,我会这样做:

<?php namespace \Illuminate\Database\Eloquent;

abstract class LoadingModel extends Model {

    /**
     * Register a loaded model event with the dispatcher.
     *
     * @param  \Closure|string  $callback
     * @return void
     */
    public static function loaded($callback)
    {
        static::registerModelEvent('loaded', $callback);
    }

    /**
     * Get the observable event names.
     *
     * @return array
     */
    public function getObservableEvents()
    {
        return array_merge(parent::getObservableEvents(), array('loaded'));
    }

    /**
     * Create a new model instance that is existing.
     *
     * @param  array  $attributes
     * @return \Illuminate\Database\Eloquent\Model|static
     */
    public function newFromBuilder($attributes = array())
    {
        $instance = parent::newFromBuilder($attributes);

        $instance->fireModelEvent('loaded', false);

        return $instance;
    }

}

只需确保相关模型的子类来自LoadingModule。我已经确认这是可行的,因为我发现了它的一个很好的用例。旧版本的 PHP 将 MySQL 值作为字符串返回。通常,PHP 会在数值运算中将它们默默地转换为各自的数值类型。但是,转换为 JSON 不被视为数字运算。 JSON 值表示为字符串。这可能会给我的 API 的客户端带来问题。所以我添加了一个loaded向我的模型发送事件以将值转换为正确的类型。

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

从数据库检索 Eloquent 模型时执行代码 的相关文章

  • Split() 已弃用 [重复]

    这个问题在这里已经有答案了 可能的重复 PHP 拆分替代方案 https stackoverflow com questions 2813241 php split alternative Successful geocode geocod
  • 致命错误:嵌套级别太深 - 递归依赖?

    我有一个复杂的嵌套对象层次结构 所有子对象 在父类中存储了一个对象数组 都包含链接回其父级的属性 相当简单明了 没有真正的问题 如果我对层次结构中的任何对象执行 var dump 我将在转储中获得递归引用 正如我所期望的那样 FIRSTGE
  • pdf下载 html2pdf

    我正在使用 html2pdf 类来生成 pdf 在我的问题中 它为 html 代码生成 pdf 但它没有提供下载该 pdf 的对话框选项 请帮助我的情况如下
  • Zend DB Select 具有多个表联接

    尝试使用复制以下查询Zend Db Select 有什么指点吗 SELECT compounds id as compounds id reactions id as reactions id reaction compound numbe
  • Recaptcha - 表单定制

    有谁知道 recaptcha 是否可以在没有默认框架的情况下完全自定义 我需要验证码图像和输入字段只有一定的宽度 以前有人成功做到过吗 您可以使用 自定义 主题选项指定自定义标记 方法是在页面上包含类似以下内容 然后 您在页面上创建一个 d
  • 我想在我的 Wordpress BootStrap 导航中添加一行

    我有一个简单的网站 我想在导航上方添加一行 其中包含电话号码 也许还有一些社交链接 我的主题名为 Hestia Pro 找不到在哪里添加此额外行 我正在寻找一些关于将其添加到网站主题中的位置的指示 网站是 www gpoint co uk
  • 当用户使用 Internet Explorer 时重定向到新页面

    我使用下面的代码将使用 Internet Explorer 的用户重定向到新页面 但显然代码有问题 因为当我使用 Internet Explorer 时该网站不再加载 这是代码 由于我不知道我做错了什么 如果有人可以发布使用正确编码的正确方
  • 分页打印所有数据

    我在打印数据表中具有分页的所有数据时遇到问题 我已经做过研究并在此链接中发现了同样的问题 仅打印 https stackoverflow com questions 468881 print div id printarea div onl
  • symfony2 实体验证正则表达式 a-z A-Z 0-9

    symfony2 中是否有一种内置方法可以根据经典的 a z A Z 和 0 9 规则验证字符串 在我的例子中是用户名和另一个属性 我是否必须自己在正则表达式中编写它作为自定义验证器 如果是这样 请提示在哪里查看 你应该使用原生的正则表达式
  • SQS重复消息处理

    我正在使用运行队列进程Amazons SQS以及处理作业的单独机器 工人 我也在使用supervisor以确保queue listen总是在工作机器上运行 但是当我定义时numprocs 8 就像 Laravel 网站上的示例 作业被执行多
  • 删除一行或多行后,在 auto_increment 列上使用下一个可能的主键

    我有一个带有主键 自动增量 ID 列的表 当我删除具有最高 ID 的行 例如 ID 100 时 我想仅使用 mysql 触发器将该 ID 100 用于新行 我怎么做 当我删除时 例如 ID 1 并且最高 ID 是 100 我不想再次使用 I
  • 如何使用 PHP 访问关联数组中的值

    我有一个数组 它是使用 Amazon SimpleDb 进行选择查询的结果 这是我 print r result 时的示例数据 Array 0 gt Array Name gt 5140ede647e74 Attributes gt Arr
  • 如果仅登录facebook,则获取facebook用户 php sdk

    我想在 php sdk 中获取当前登录的 facebook 用户 这是我尝试过的 facebook new Facebook array appId gt XXXXXXXXXXX secret gt XXXXXXXXXXXXXXXXXXXX
  • 在ubuntu上安装php70-gd

    最近新的php7已经发布了 但是 当我尝试安装 gd 包时 找不到该库 我已经尝试过 sudo apt get install php70 gd and sudo apt get install php70 php gd 有人知道 gd 是
  • 通过 php 请求表单名称[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 当我提交表单时 我想从 php 检索
  • php脚本在某个页面停留几秒钟并重定向

    有没有办法让页面在 php 中显示几秒钟并重定向到另一个页面 元重定向可能是您想要的 但是您CAN在 PHP 中也执行此操作 如下所示 其中 10 是等待的秒数
  • 使用 AJAX 提交表单,将表单数据传递给 PHP,无需刷新页面 [重复]

    这个问题在这里已经有答案了 谁能告诉我为什么这段代码不起作用
  • 购物车商品未显示在客户视图中

    运行 Magento 1 7 2 当在管理员的客户视图中时 它显示客户购物车中的 1 件商品 但不显示详细信息 我附上了屏幕截图 有谁知道问题可能是什么 或者您能否验证它是否正常工作 以便我知道这是我的安装 Thanks 在此处查看屏幕截图
  • Laravel Mix 生成字体到另一个目录

    我在用着laravel mix它建在顶部webpack 我面临字体目录的问题 例如 font awesome包中有一个 scss 文件和一个放置所有字体的字体目录 font awesome scss fontawesome scss web
  • 如何使用 PHP 监听 TCP 端口? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个 GPS 跟踪器 它通过 G

随机推荐