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

Posted

技术标签:

【中文标题】尽管存在索引,但未定义的索引仍然存在【英文标题】:Undefined Index persists although index exists 【发布时间】:2017-04-17 04:03:43 【问题描述】:

所以基本上我想创建一个有点像这样的列表数组

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;

这行得通,当我在$region[index] 上使用var_dump 时,它按预期显示idcity

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

$region['city'] 上的var_dump 也会返回其相应的内容数组。

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

【问题讨论】:

我真的说不清楚,给你看表结构。 $regions[city['region_id']]['cities'][] = city; - 除非你在任何地方定义了常量city,否则它不会起作用。如果没有:尝试在变量名前使用$ 【参考方案1】:

错误在于这段代码,

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

但我建议你使用 laravel 一对多的 eloquent。

将此添加到区域模型

public function cities()

    return $this->hasMany('City', 'region_id');

将此添加到城市模型

public function region()

    return $this->belongsTo('Region', 'region_id');

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

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

希望对你有帮助。

【讨论】:

是的,我会考虑的。谢谢你的回答:) 非常感谢,我们决定尝试这种方法,这将是一个很大的帮助,谢谢^^

以上是关于尽管存在索引,但未定义的索引仍然存在的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:未定义的索引 - 数组键不存在

C:尽管添加了 `-ldl` 标志,但未定义对 `dlopen`/`dlsym` 的引用

内部连接出错 - 尽管存在表但未找到表

尽管表存在,但未找到 Hive 表或视图

已定义但未用于整个项目的变量

在数据库上插入记录时未定义的索引