php Laravel模型-根据其他列的值添加自定义字段

xqkwcwgp  于 2023-03-21  发布在  PHP
关注(0)|答案(1)|浏览(194)

我这里有一个laravel模型,有5列。Id_profile,first_name,last_name,dbo和genderGender是数据库上的一个int。它接收0,1或2。

0为男性
1为女性
2为其他

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Enums\GenderEnum;

class Profile extends Model
{
    use HasFactory;

    protected $table = 'profile';
    protected $fillable = ['id_profile', 'first_name', 'last_name', 'dbo', 'gender'];
    protected $appends = ['gender_name'];

    protected $dates = ['dbo'];
    protected $casts = ['dbo'  => 'datetime:d/m/Y'];
    protected $primaryKey = 'id_profile';
    public $timestamps = false;

    public function getGenderNameAttribute($gender)
    {
        switch ($gender) {
            case '0':
                return 'Male';
            case '1':
                return 'Female';
            case '2':
                return 'Other';
        }
    }

}

我想返回模型的性别编号和新字段gender_name及其描述。
我不知道如何参数化一个函数来实现这一点,我用appends变量和getGenderNameAttribute函数尝试了一下。
如何将gender_name添加到模型结果中?

wlwcrazw

wlwcrazw1#

看起来你使用的是laravel 8,并且你正在定义一个访问器,如果你的列实际上是gender,你需要改变它的值:

public function getGenderNameAttribute($value)
{
    switch ($this->attributes['gender']) {
        case 0: // here is number not string.
            return 'Male';
        case 1:
            return 'Female';
        case 2:
            return 'Other';
    }
}

通过这个访问,或者现在你有了属性gender_name,你可以通过以下方式访问你的模型:

$profile = Profile::find(1);
echo $profile->gender_name; // Male
echo $profile->gender; //0

相关问题