php - 当从数据库中检索 Eloquent 模型时执行代码

标签 php events laravel eloquent

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

编辑:我最初认为 restoring 事件是放置相关逻辑的正确位置,但正如 Tyler Crompton 在下面指出的那样,restoring 在恢复软删除的记录。

最佳答案

你有两个有效的选择:

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

<?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 事件,以将值转换为正确的类型。

关于php - 当从数据库中检索 Eloquent 模型时执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18883859/

相关文章:

php - 一张表的多个模型 Laravel

PHP 表单电子邮件请求不通过表单数据

php mysql 查询3个表(用户、主题、消息)

Java Swing : How do I wake up the main thread from the event-dispatch thread?

javascript - ckeditor onKeyUp 事件如何?

javascript - 元素输入上的 JQuery 自定义事件处理程序

php - 来自 PHP/MYSQL 查询的唯一/不同值

php - 使用mysql和php下载pdf文件

Laravel 使用 Bcrypt 密码创建第一条记录

php - 直接从 Eloquent 查询中提取和格式化日期