有没有办法在select / get上用eloquent添加一个事件?
我只看到这些方法:
public function getObservableEvents()
{
return array_merge(
array(
'creating', 'created', 'updating', 'updated',
'deleting', 'deleted', 'saving', 'saved',
'restoring', 'restored',
),
$this->observables
);
}
我希望能够更改模型返回的值
我有这个型号:
class Fee extends Eloquent {
protected $table = 'fees';
protected $fillable = array('occ_paxs_id',
'description',
'amount',
'other',
'hstgst',
'pst',);
}
$fee = Fee::find($id); // here I want to be able to add a markup on the property amount
答案 0 :(得分:1)
Eloquent支持自定义访问器和更改器。根据您问题中的模糊描述,这些可能会满足您的需求。
class Fee extends Eloquent
{
protected $fillable = [
'occ_paxs_id',
'description',
'amount',
'other',
'hstgst',
'pst',
];
protected $appends = [
'formatted_amount',
];
/**
* Override the default attribute accessor.
*/
public function getAmountAttribute($value)
{
return "This is the amount - {$value}";
}
/**
* Or define a custom attribute accessor.
*/
public function getFormattedAmountAttribute()
{
return "This is my formatted amount - {$this->amount}";
}
}
$fee = Fee::find($id);
echo $fee->amount; // This is the amount - 0.00
echo $fee->formatted_amount; // This is my formatted amount - 0.00
答案 1 :(得分:0)
你可以拥有Observers @ ORM(例如费用),但它只跟踪单个ORM实例的常规操作:创建,创建,更新,更新,删除,删除以及我相信的更多。
您可以使用这样的Mutator和Accessor在插入之前和检索数据之后更改数据:
class Fee extends Eloquent {
protected $table = 'fees';
protected $fillable = array('occ_paxs_id',
'description',
'amount',
'other',
'hstgst',
'pst',);
//Mutator = before it inserts into the database, it converts $value to a lower case string
public function setAmountAttribute($value) {
$this->attributes['first_name'] = strtolower($value);
}
//Accessor - after it retrieves data from the database, it places the capital letter in UpperCase (ucfirst).
public function getAmountAttribute($value) {
return ucfirst($value);
}
}
通过创建以get
开头并以Attribute
结尾的函数,laravel根据名称查找相关属性。如果需要,您还可以获取不存在的属性并对其应用逻辑(例如,在下面的示例中获取一个人的fullName,这意味着将在您的ORM结果中返回名为fullName的变量及其内容):
public function getFullNameAttribute() {
return $this->attributes['first_name'] " . " $this->attributes['last_name'];
}
https://laravel.com/docs/4.2/eloquent#accessors-and-mutators
答案 2 :(得分:0)
在 Laravel 5.5 中添加了一个 retrieved
事件。
当从数据库中检索现有模型时,将触发 retrieved
事件。