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 个选项:
- 在
WHERE
子句中使用 CONCAT
User::query()
->whereRaw('CONCAT(first_name, " ", last_name) = "?"', [$request->full_name])
->get();
- 获取所有用户,然后过滤结果
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)可能是更好的选择。
我要创纪录
如果在模型用户中
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 个选项:
- 在
WHERE
子句中使用CONCAT
User::query()
->whereRaw('CONCAT(first_name, " ", last_name) = "?"', [$request->full_name])
->get();
- 获取所有用户,然后过滤结果
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)可能是更好的选择。