Php 将集合的值转换为laravel中的键

Php 将集合的值转换为laravel中的键,php,laravel,laravel-5,Php,Laravel,Laravel 5,这是我的mysql查询: $tmp=almacen::select('nombre_empresa','oferta')->join('users','users.id','=','almacen.emp_id')->where('almacen.event_id','5')->get(); 这将返回以下几个对象: ... App\almacen {#1948 nombre_empresa: "Aux1", oferta: "Serv_1234

这是我的mysql查询:

$tmp=almacen::select('nombre_empresa','oferta')->join('users','users.id','=','almacen.emp_id')->where('almacen.event_id','5')->get();
这将返回以下几个对象:

   ...
   App\almacen {#1948
     nombre_empresa: "Aux1",
     oferta: "Serv_1234",
   },
   App\almacen {#1947
     nombre_empresa: "Aux2",
     oferta: "Serv 12345678",
   },
  ...
例如,我需要在一个键中转换“nombre_empresa”

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

在拉威尔有可能做到这一点吗?或者我应该用另一种方式来做吗?

当然拉威尔可以处理,请查看
mapWithKeys
可能就是您想要的:

$mapped = $results->mapWithKeys(function ($item) {
    return [$item['nombre_empresa'] => $item['oferta']];
});
编辑:
mapWithKeys
而不是
map

您可以使用:

您可以在查询结束时,在get方法之后直接链接它

但是在这种情况下,您只能从数据库中获取2个字段,您可以直接在
查询生成器上使用
pull

$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()

  • 注意,我将转换toRayay.(),但它不是必须的,我会考虑它,因为使用这样一个简单的集合,我可能不需要额外的功能,使得这个变量占用更少的空间。
$tmp=almacen::select('nombre_empresa','oferta')
    ->join('users','users.id','=','almacen.emp_id')
    ->where('almacen.event_id','5')
    ->get()
    ->pluck('oferta', 'nombre_empresa')
    ->toArray();