将集合的值转换为Laravel中的钥匙



这是我的mysql查询:

$tmp=almacen::select('nombre_empresa','oferta')->join('users','users.id','=','almacen.emp_id')->where('almacen.event_id','5')->get();

这返回了类似的几个对象:

   ...
   Appalmacen {#1948
     nombre_empresa: "Aux1",
     oferta: "Serv_1234",
   },
   Appalmacen {#1947
     nombre_empresa: "Aux2",
     oferta: "Serv 12345678",
   },
  ...

我需要在密钥中转换" nombre_empresa",例如

$tmp['Aux2']
this return:
"Serv 12345678"

可以在Laravel中这样做吗?还是我应该以另一种方式进行?

确保Laravel可以处理它,请查看可用的收集方法。mapWithKeys可能是您要寻找的:

$mapped = $results->mapWithKeys(function ($item) {
    return [$item['nombre_empresa'] => $item['oferta']];
});

编辑:mapWithKeys而不是map

https://laravel.com/docs/5.5/collections#method-mapwithkeys

您可以使用keyby:

$tmp->keyBy('nombre_empresa');

您可以直接在查询结束时将其链接。

但是,在这种情况下,您只能从数据库中获得2个字段,可以直接在query builder上使用pluck

$tmp=almacen::select('nombre_empresa','oferta')
    ->join('users','users.id','=','almacen.emp_id')
    ->where('almacen.event_id','5')
    ->pluck('oferta','nombre_empresa');

Pull的第二个论点将用于钥匙。如果没有给出,则只会使用数字键:0,1,...

当然,所有解决方案都是有效的,但是我认为这也被认为是Laravel的最佳实践的方式是使用pluck()文档

示例:

$tmp=almacen::select('nombre_empresa','oferta')
    ->join('users','users.id','=','almacen.emp_id')
    ->where('almacen.event_id','5')
    ->get()
    ->pluck('oferta', 'nombre_empresa')
    ->toArray();

确实注意到pluck()是版本5.2中介绍的一种新方法,用于替换之前使用的lists()

  • 请注意,我会转换toarray((,但这不是必须的,我会考虑的,因为有了这样一个简单的集合,我可能不需要额外的功能,从而使此变量占用更少的空间。

最新更新