現(xiàn)有一個用戶表,有一個“avatar_uri”字段存儲用戶頭像的文件名(如下圖),Laravel ORM 如何實現(xiàn)自動在查詢結果的“avatar_uri”自動前面加上固定文字(如路徑)。
即 0mpk80m37456tqm2.jpg
-> /public/0mpk80m37456tqm2.jpg
任何方案都行,只要效果到達~
定義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
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']);
這樣結果中有自定義字段了。