在模型中使用ghost属性或方法进行自定义输出

时间:2017-01-17 15:12:06

标签: php laravel laravel-5 eloquent

如果我为我的模型创建自定义输出,我应该使用方法或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 }}

1 个答案:

答案 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表中,或者它是否是派生属性,它只是可以访问和使用的另一个属性。