我有一个雄辩的模型。每当从数据库中检索它时,我想检查是否满足条件并在满足情况下设置模型属性。
编辑:我最初认为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(使用前将#替换为@)