Laravel 采摘但结合名字+姓氏进行选择

Posted

技术标签:

【中文标题】Laravel 采摘但结合名字+姓氏进行选择【英文标题】:Laravel pluck but combining first name + last name for select 【发布时间】:2017-11-12 12:27:27 【问题描述】:

在 Laravel/Vue 项目中使用 select2,需要返回如下格式的 JSON:

[
     id: 0, text: 'enhancement' ,
     id: 1, text: 'bug' 
]

在 Laravel 中,我知道我可以使用 pluck 来创建我的列表数据,例如对于客户:

$customers = Customer::pluck('id', 'first_name');

但是想要将 id 和名字 + 姓氏作为一个名字返回。

我该怎么做?

【问题讨论】:

【参考方案1】:

您是否尝试过使用访问器?

https://laravel.com/docs/5.4/eloquent-mutators#defining-an-accessor

我还没有测试过,但这可以工作:

将此添加到您的 Customer Eloquent 模型中:

    public function getFullNameAttribute()
    
       return ucfirst($this->first_name) . ' ' . ucfirst($this->last_name);
    

然后尝试:

UPDATED pluck on accessor 仅适用于集合。如果您尝试Customer::pluck('id', 'full_name'),它将无法正常工作,因为没有名为 full_name 的 db 列,因此您必须使用Customer::all()->pluck('full_name', 'id')

$customers = Customer::all()->pluck('full_name', 'id');
附带说明,为了提高性能,最好使用Customer::all(['id', 'first_name', 'last_name'])->pluck(...),这样我们就不会从数据库中提取不必要的列。

希望这会有所帮助。

更新日期:- 2021 年 8 月 26 日 如果我们使用计算属性accessor functionality,那么请注意一件重要的事情......

Laravel 访问器功能在从数据库中获取数据之后起作用。所以我们必须在Query结束时声明"pluck(accessorName)"....

例如:-

错误的方法:-

$data = Model::pluck('full_name','id)->get(); 
$data = Model::pluck('full_name','id)->all();

在上述两个查询中,如果 DataTable 中没有 full_name 字段,则会出现 Unknown column error

正确的方法:-

$data = Model::get()->pluck('full_name','id');
$data = Model::all()->pluck('full_name','id');

在上述两个查询中,即使您在 DataTable 中没有 full_name 字段,它也能完美运行

【讨论】:

感谢您解释这仅适用于集合,这正是它不适用于我的原因。赞成!【参考方案2】:

你可以这样做,

$customers = DB::table('customers')->select("id", "CONCAT(firstname,' ',lastname) as fullname")->get();

或者你也这样做,

$customers = DB::table('customers')->select(DB::raw('CONCAT(firstname,' ',lastname) as fullname, id'))->get();

或者用php方式,

$fullname = $customers->firstname. " " .$customers->lastname;

【讨论】:

它给了我 SQLSTATE[42S22]:找不到列:1054 未知列 'CONCAT...【参考方案3】:

对我来说很有效

\DB::table("admin as c")->select(\DB::raw("CONCAT(FirstName, ' ', LastName) AS FIRSTNAME"),"c.AdminID")->pluck("FIRSTNAME","AdminID");

【讨论】:

【参考方案4】:

用户模型:

public function getFullNameAttribute()

    return "$this->first_name $this->last_name";

获取查询将导致收集:

$agents = User::whereId($agent->id)->get()->pluck('full_name', 'id');

为了将变量从对象转换为数组:

  $agents = json_decode(json_encode($agents), true);

它对我有用。享受吧。

【讨论】:

【参考方案5】:
   /**
 * Get the full name of the user.
 *
 * @return string
 */
public function getFullNameAttribute()

    return "$this->first_name $this->last_name";

并使用这个采摘

User::all()->sortBy('id')->pluck('full_name', 'id')

喜欢这个

   public static function list()

    return Cache::tags('usersCustomers')->rememberForever(md5('usersCustomers.list:' . locale()), function () 
        return self::all()->sortBy('id')->pluck('full_name', 'id');
    );

【讨论】:

【参考方案6】:

使用此代码。希望它会奏效。我用这段代码解决了这个问题

User::select(DB::raw("CONCAT(first_name, ' ', last_name) AS full_name"),"id")->pluck("full_name","id");

【讨论】:

【参考方案7】:

** 使用此代码。希望它会奏效。我用这段代码解决了这个问题**

       User::select(DB::raw("CONCAT(first_name, ' ', last_name) AS 
       full_name"),"id")->pluck("full_name","id");

【讨论】:

以上是关于Laravel 采摘但结合名字+姓氏进行选择的主要内容,如果未能解决你的问题,请参考以下文章

通过 facebook ios SDK 结合 Azure 移动服务获取名字和姓氏

如何通过在 ios 中结合个人实体的名字和姓氏来对全名应用谓词

采摘渴望加载Laravel 5.2

Laravel Nova:按列分组表单字段

根据名字和姓氏值自动填写和匹配电子邮件输入

分页前 Laravel 雄辩的采摘数据