如何在Laravel模型中编写NotMapped实体?

gdm*_*hon 7 php model eloquent laravel-5

我是新手laravel,因此我的问题可能对某些人来说很奇怪.好吧,我的问题是如何在Laravel Model类中编写一个实体,在迁移后不会在数据库中创建任何字段.例如

class JobseekerModel extends Model
{
    use SoftDeletes;
    protected $table='dbl_jobseekers';
    protected $primaryKey='id';
    protected $fillable=[
        'FirstName',
        'MiddleName',
        'LastName',
        'Dob',
        'Education',
        'DesireField',
        'Skill',
        'SpecialSkill',
        'Experience',
        'Location',
        'HomeAddress',
        'Salary',
        'Comenteries',
        'Resume'
    ];
    protected $dates = ['deleted_at'];
}
Run Code Online (Sandbox Code Playgroud)

这是我的模型,现在我想在我的模型中添加另一个名为'PagedListSize'的属性,但我不想将其创建为数据库列.那我该怎么做?

例如,我熟悉使用NotMapped属性.Net Framework,这是写的

[NotMapped]
public int PagedListSize {set; get;}
Run Code Online (Sandbox Code Playgroud)

那么,我该怎么做呢.在laravel有没有办法做到这一点?我正在努力Laravel 5.4

Chr*_*ras 5

您可以创建自定义Mutator来拥有那种自定义属性,而无需将它们映射到 Laravel 中的数据库字段。

class Tag extends Model
{
    public function getFullNameAttribute()
    {
        return $this->first_name.' '.$this->last_name;
    }

    public function setFullNameAttribute($value)
    {
        list($this->first_name, $this->last_name) = explode(' ', $value);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在初始化模型后像这样使用它:

$tag->full_name = "Christos Lytras";
echo $tag->first_name; // prints "Christos"
echo $tag->last_name; // prints "Lytras"
Run Code Online (Sandbox Code Playgroud)

这是一个修补程序截图:

工匠修补程序示例


Chi*_*ata 2

在 Laravel 中做到这一点的最佳方法确实是通过自定义 Mutators。此外,可以将变异器配置为显示在模型的 json 或数组输出转储中。例如PagedListSize我们可以有:

public functionGetPagedListSizeAttribute()
{
    return #some evaluation;
}

protected $appends = array('pagedListSize');
Run Code Online (Sandbox Code Playgroud)

这样,pagedListSize不仅可以直接作为字段使用,而且在模型序列化为 Json 或数组时也可以使用。