我有一个 Eloquent 模型。每当从数据库中检索到它时,我想检查是否满足条件并在满足条件时设置模型属性。
编辑:我最初认为 restoring
事件是放置相关逻辑的正确位置,但正如 Tyler Crompton 在下面指出的那样,restoring
在恢复软删除的记录。
最佳答案
你有两个有效的选择:
- 你可以继承
\Illuminate\Datebase\Eloquent\Model
添加这样的事件。 - 您可以修改您的
\Illuminate\Datebase\Eloquent\Model
副本添加这个(并可能发送(未经请求的)拉取请求到 Laravel on GitHub )。根据Issue 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
事件,以将值转换为正确的类型。
关于php - 当从数据库中检索 Eloquent 模型时执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18883859/