2016-12-02 68 views
0

所以基本上我想创建一个列表阵列肚里有点像这个未定义指数仍然存在,虽然指数存在

Array("Region") 
['id'] => 1 
['city'] => Array() 
从数据库中,我得到了地区这样

所以:

$regions = Region::get()->keyById()->toArray(); 
$cities = City::get()->toArray(); 

然后

foreach($city as $city) 
{ 
    $regions[city['region_id']]['cities'][] = city; 
} 

这工作中途,当我使用var_dump$region[index],它显示如预期两idcity

​​

太不var_dump$region['city']返回其相应的内容阵列。

Array("Region") 
['id'] => 1 
['region_id'] => 1 
other_contents 

然而,当我var_dump-ed $region['id'],它返回一个Undefined index: id代替。

表结构

Region 
id 
other_content 

City 
id 
region_id 
other_content 
+1

我真的不能说清楚,给你看表结构。 –

回答

0

误差在于这个代码,

$regions[city['region_id']]['cities'][] = city; 

$区域是$区域的阵列,所述阵列索引是0,1,2,而不是的region_id

您可以更改为此

$regions = Region::get()->keyById()->toArray(); 
foreach($regions as $region) 
{ 
    $region['cities'] = City::where('region_id', $region->id)->get()->toArray(); 
} 

但我建议你使用laravle一对多的口才。

它添加到区域模型

public function cities() 
{ 
    return $this->hasMany('City', 'region_id'); 
} 

它添加到城市模型

public function region() 
{ 
    return $this->belongsTo('Region', 'region_id'); 
} 

然后在你的控制器,你可以使用

$region->cities()获得在该地区的所有城市。

希望它有帮助。

+0

是的,我会考虑这一点。感谢您的答案:) – dotnite

+0

@dotnite我已重新编辑它。 –

+0

非常感谢,我们决定尝试这种方法,这将是一个很大的帮助,谢谢^^ – dotnite