这是我的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((,但这不是必须的,我会考虑的,因为有了这样一个简单的集合,我可能不需要额外的功能,从而使此变量占用更少的空间。