Laravel8 属性或附加在查询中的位置

Laravel8 attribute or appends in query where

我要创纪录

如果在模型用户中

class User extends Model {

       protected $fillable = ['last_name','first_name'];

       protected $appends = [
         'full_name',
       ];

       public function getFullNameAttribute(): string
       {
            return $this->first_name . ' ' . $this->last_name;
       }
}

请求中

full_name = 'John Johans';

如果

如何获取数据库记录
 User::query()->where('full_name',$request->full_name) 

如果我使用此记录,答案将是 full_name 在数据库中不存在的错误

我想使用“where”作为“追加”

User::query()->where(**MY ATTRIBUTE**,$request)->first()

有可能吗?

2 个选项:

  1. WHERE 子句中使用 CONCAT
User::query()
    ->whereRaw('CONCAT(first_name, " ", last_name) = "?"', [$request->full_name])
    ->get();
  1. 获取所有用户,然后过滤结果 Collection
User::cursor()
    ->filter(function ($user) use ($request) {
        return $user->full_name == $request->full_name;
    })
    ->collect();
User::cursor()
    ->filter(fn($user) => $user->full_name == $request->full_name)
    ->collect();

让 SQL 进行过滤(选项 1)可能是更好的选择。