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 5.4 SQL“找不到列”

Laravel 删除数据 - SQLSTATE [42S22]:找不到列:1054 未知列

Laravel 5.8:SQLSTATE [42S22]:找不到列:1054 未知列

SQLSTATE [42S22]:找不到列:1054 未知列 laravel 5.1

Laravel 5 SQLSTATE [42S22]:找不到列:1054 '字段列表'中的未知列'user_id'