【已解决】Laravel ORM 如何实现在查询结果的一个字段追加固定前缀

fgt1t5y

问题描述

现有一个用户表,有一个“avatar_uri”字段存储用户头像的文件名(如下图),Laravel ORM 如何实现自动在查询结果的“avatar_uri”自动前面加上固定文字(如路径)。

0mpk80m37456tqm2.jpg -> /public/0mpk80m37456tqm2.jpg

截图

任何方案都行,只要效果到达~

344 2 0
2个回答

胡桃

定义Accessor

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Get the user's first name.
     */
    protected function firstName(): Attribute
    {
        return Attribute::make(
            get: fn (string $value) => ucfirst($value),
        );
    }
}

使用:

use App\Models\User;

$user = User::find(1);

$firstName = $user->first_name;

文档:https://laravel.com/docs/10.x/eloquent-mutators#defining-an-accessor

xini2603

larlvel 是支持写入与查询时自定义的

查询在model文件中定义:
public function getAvatarUriAttribute($value){
//取其它字段值用:$this->字段名
return '自定义前缀'.$value;
}

这样任意model查询时会自动调用方法转换字段值,

同理入库时自动转换就是setAvatarUriAttribute($value){}

或者你自定义一个查询字段

public function getAvatarUrlAttribute(){
//取其它字段值用:$this->字段名
return '自定义前缀'.$this->avatar_uri;
}

单条查询直接使用:$data->avarar_url 即可

列表查询在get()后面追加append
get()->append(['avatar_url']);

这样结果中有自定义字段了。

🔝