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

时间:2018-02-05 04:22:12

标签: php laravel laravel-5

这是我的mysql查询:

jobsNearByFetch

这将返回以下几个对象:

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

我需要转换" nombre_empresa"在一个键中,例如

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

是否可以在Laravel中执行此操作?或者我应该以另一种方式做到这一点?

3 个答案:

答案 0 :(得分:1)

当然Laravel可以解决这个问题,请查看available collections methodsmapWithKeys可能就是你要找的东西:

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

修改:mapWithKeys而不是map

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

答案 1 :(得分:0)

您可以使用keyBy

$tmp->keyBy('nombre_empresa');

您可以将其直接链接到查询的末尾,即get方法之后。

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

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

第二个参数pluck将用作键。 如果没有给出,它将仅使用数字键:0、1,...

答案 2 :(得分:0)

当然,所有解决方案都是有效的,但是我认为在Laravel中被认为是最佳实践的方法是使用pluck() Documentation

示例:

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