Laravel - 找不到列:'full_name'
Posted
技术标签:
【中文标题】Laravel - 找不到列:\'full_name\'【英文标题】:Laravel - Column not found: 'full_name'Laravel - 找不到列:'full_name' 【发布时间】:2021-10-27 11:40:26 【问题描述】:在我的laravel-8 中,我有一个模型尝试连接:
protected $appends = 'full_name';
public function getFullNameIdAttribute()
return ucfirst($this->last_name) . ', ' . ucfirst($this->first_name). ' ' . ucfirst($this->other_name);
我想从模型中连接员工的name
。
控制器:
public function employeeParameters()
try
$employees = Employee::select('full_name', 'id')->get();
return $this->success('Vehicle Detail.', [
'employees' => $employees,
]);
catch(\Throwable $e)
Log::error($e);
return $this->error($e->getMessage(), $e->getCode());
但是我收到了这个错误:
local.ERROR: PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'full_name'
并指向这一行:
$employees = Employee::select('full_name', 'id')->get();
我如何做到这一点?
谢谢
【问题讨论】:
您不能将full_name
用作select
中的列,因为它不是列,而是属性。您的代码应该与 $employees = Employee::select('first_name', 'last_name', 'other_name', 'id')->get();
一起使用,因为您包含了 protected $appends = 'full_name';
(尽管它可能需要是一个数组,例如 protected $appends = ['full_name'];
)
@TimLewis - 我现在如何实现这一目标。我想从 laravel 后端合并 first_name、last_name 和 other_nme
你看我的评论了吗? 如果您将代码更改为:$employees = Employee::select('first_name', 'last_name', 'other_name', 'id')->get();
,您的代码应该可以工作。你试过了吗?
另请注意,您的属性名为getFullNameIdAttribute
,这将转换为full_name_id
,而不是full_name
请阅读访问器的工作原理:laravel.com/docs/8.x/eloquent-mutators。当您定义getFullNameAttribute()
时,您可以通过$employee->full_name
访问它。它不会在您的数据库表上创建列,因此您不能使用->select('full_name')
,但如果您使用$employee = Employee::select('first_name', 'last_name', 'other_name', 'id')->first()
,那么您可以像$employee->full_name
一样访问它。由于您使用的是->get()
,因此您必须循环:foreach ($employees as $employee) ...
,然后在该循环中,$employee->full_name
。请阅读文档。
【参考方案1】:
你可以通过这样的别名来实现这一点
Employee::select(\DB::raw("CONCAT(`first_name`,' ',`last_name`) AS `full_name`"))->get();
【讨论】:
以上是关于Laravel - 找不到列:'full_name'的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE [42S22]:找不到列:1054 未知列 - Laravel
Laravel 删除数据 - SQLSTATE [42S22]:找不到列:1054 未知列
Laravel 5.8:SQLSTATE [42S22]:找不到列:1054 未知列