2016-12-02 6 views
0

Поэтому в основном я хотел создать массив списка, который идет нечто вроде этогоUndefined индекс сохраняется, хотя существует индекс

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], это показывает s, как ожидается, как id и city

[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

ошибки лежат в этом коде,

$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

 Смежные вопросы

  • Нет связанных вопросов^_^