尽管索引存在,但未定义的索引仍然存在

时间:2016-12-02 09:36:15

标签: php arrays laravel-4

所以基本上我想创建一个类似于

的列表数组
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

[0]=>
 ['id'] => 1
 other_contents
 ['city'] => Array()

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 :(得分:0)

错误在于此代码,

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

$ regions是$ region的数组,数组索引是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()获取该地区的所有城市。

希望它有所帮助。