2016-09-28 65 views
0

我使用下面的代码从两个相关表中获取数据:如何优化Laravel中的代码?

$arr = []; 
$objectModel = new ProductCategory(); 
$objectModel::$language = 2; 

$subcategories = $objectModel::with("translate", "parent")->get(); 

foreach($subcategories as $key => $item) { 
    $arr[$item->translate()->first()->objectId] = $item->translate()->first()->name; 
} 

array_unshift($arr, 'Select category'); 
return $arr; 

在结果这部分代码我得到key => value阵列在刀片模板选择列表中插入此。

但我希望摆脱一个循环:

foreach($subcategories as $key => $item) { 
    $arr[$item->translate()->first()->objectId] = $item->translate()->first()->name; 
} 

而且从要求得到清晰的集合。我该怎么做?

回答

1

您可以使用Laravel Collectionshttps://laravel.com/docs/5.3/collections

$arr = ProductCategory::with("translate", "parent")->get() 
      ->mapWithKeys(function ($item, $key) { 
       return [$item->translate()->first()->objectId => $item->translate()->first()->name]; 
      }) 
      ->all(); 
+0

为什么要用'收集()'在这里吗?文档中说:“雄辩查询的结果总是作为集合实例返回。”请参阅“创建集合”的提示。 – Doom5