如果我为我的模型创建自定义输出,我应该使用方法或ghost属性。假设我的数据库有列first_name和last_name,我想在我的视图中以fullName的形式访问它们。哪个更好:
//Model
public function fullName()
{
return $this->first_name . ' ' . $this->last_name;
}
//View
{{ $model->fullName() }}
或者
//Model
public function getFullNameAttribute()
{
return $this->first_name . ' ' . $this->last_name;
}
//View
{{ $model->fullName }}
答案 0 :(得分:1)
主观问题通常有主题答案 - 这个问题是个例外。
您几乎肯定会使用属性版本,因此您可以轻松利用雄辩的序列化。
Laravel对于Eloquent模型具有get[name]Attribute
形式的属性 - 并且自早期版本的Laravel以来一直存在。意味着它的概念在Laravel作为一个整体的方式中根深蒂固。
您的示例的序列化示例如下:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $appends = ['full_name'];
public function getFullNameAttribute()
{
return $this->first_name . ' ' . $this->last_name;
}
}
稍后,full name
属性将自动神奇地存在于此模型存在的每种形式中 - 无论是以Elqouent形式,还是已转换为数组(使用toArray)或json (通过toJSON)。
这很棒,因为从“外部”应用程序的其他部分不需要知道full_name是否在db表中,或者它是否是派生属性,它只是可以访问和使用的另一个属性。