请教一个问题,在使用 laravel 的时候,数据库中的性别数据是 1,但是我想在返回 api 是变成“男”。应该怎么实现呢?

我唯一想到的办法是拆分后判断。但是既然 laravel 能直接把数组转换为 json ,我觉得应该是有简单的方法吧?

阅读 4.4k
7 个回答

class User extends Model {

    public function getGenderAttribute($value)
    {
        $gender = ['1'=>'男','2'=>'女'];
        return $gender[$value];
    }

}

转成json和你说的问题完全没关系。。。不想判断,那就是字符串替换了比如: "sex":"1",你替换成你要的,可以使用中间件达到。。。不过感觉杀鸡焉用牛刀,直接接口逻辑里面就弄不就好了

model写一个afterFind的函数

const EVENT_AFTER_FIND   = 'afterFind';           // 执行查询结束时触发

楼上也说了,转成json和题主的问题没有关系

我的建议
你在取出数据的时候,肯定有一个format的过程,
例如
$user=$user->find($pk)//按照你的逻辑取数据就好
ps:你不可能就把这样的数据返回给前端
需要一个formart()函数处理数据信息中的img,url等信息
so:
$info = $user->formart($user);
formart($user)
{

$user['url'] = ....;
$user['sex'] = 三元运算;(你分开判断也可以) 
'''
'''
return $user;//

}

其实实现的方法很多种。。
其他答案也可以。我跑个题
设计数据库的时候

`sex` enum('male','female')
or
`sex` enum('male','female','other')

那么直接读取结果就可以了。

客户端可以根据 male | female 判断显示 男 | 女

直接在查找数据库的时候就进行替换了:select if(sex=1,"男","女") as sex from 表名 where...

一般来说,枚举的话倾向于用这种设计方式。

class Admin extends Model
{
    protected $table = 'admin';

    
    const STATUS_OPEN = '1';
    const STATUS_CLOSED = '0';

    public static $STATUS = [
        self::STATUS_OPEN =>'开',
        self::STATUS_CLOSED =>'关',
    ];
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题