Отображение данных в блейде из нескольких таблиц в dtabase с использованием отношения Eloquent - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь отобразить поля из нескольких таблиц в одну таблицу HTML в соответствии с соответствующими данными в блейде.Но я не получаю никакого результата

Мой дизайн базы данных:

District 
| id 
| district_name

Municipal
| id
| district_id
| Municipal_uid
| municipal_name 

Area
| id 
| area_name
| district_id
| municipal_id

Это то, чего я пытаюсь достичь,

Area ID | Area Name | District Name | Municipal Name | municipal UID

Моя модель

Площадь:

public function districts(){
    return $this->belongsTo('App\Districts');
}

public function municipals(){
    return $this->belongsTo('App\Municipals');
}

Муниципальный:

public function district(){
    return $this->belongsTo('App\Districts');
}

public function approvedlayout(){
    return $this->hasMany('App\Approvedlayouts');
}

Район:

 public function municipal(){
    return $this->hasMany('App\Municipals');
}

public function approvedlayout(){
    return $this->hasMany('App\Approvedlayouts');
}

blade

 <table class="table table-striped">
                            <thead class="text-center">
                                <tr>
                                    <th>Area ID</th>
                                    <th>Area Name</th>
                                    <th>District  Name </th>
                                    <th>Municipal Name</th>
                                    <th>Municipal UID</th>
                                </tr>
                            </thead>

                            <tbody class="list">
                                @foreach ($areas as $layout)
                                <tr>
                                    <td>{{$layout ->id}}</td>
                                    <td> {{ $layout-area_name }}</td>
                                    <td> {{ $layout->districts-> district_name }}</td>
                                    <td> </td>
                                    <td></td>
                                    <td></td>
                                </tr>
                                @endforeach
                            </tbody>
                        </table>
                        {{$areas-> links()}} 

Контроллер

  public function index()
    {
        $areas = Area::simplePaginate(5);
        return view('admin.area.index',compact('areas'));
    }

Когда я пытаюсь отобразить название района

({{$ layout-> distric-->district_name}})

Я получаю сообщение об ошибке,

Пытается получить свойство 'district_name' необъекта (Просмотр: lapp / resources / views / area / index.blade.php

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019
$layout->districts()->first()->district_name

Покажет первый район.Если у вас их больше одного, вы можете сначала изменить get ().Тогда вам понадобится другой foreach.

0 голосов
/ 13 февраля 2019

Вы всегда можете просто использовать функцию leftJoin an select в построителе запросов, чтобы получить эти результаты.Это также будет намного быстрее, чем вызывать его для каждой строки.

Area::select('areas.id','areas.name', 'districts.name as district_name', 'municipals.name as municipal_name', 'municipals.id as municipal_id')
    ->leftJoin('districts', 'districts.id', '=', 'area.district_id')
    ->leftJoin('municipals', 'municipals', '=', 'area.municipal_id')
    ->get();

После этого вы можете обновить содержимое функции выбора как $layout->district_name.

0 голосов
/ 13 февраля 2019

Измените свою модель, чтобы она знала о внешнем ключе

Area:

public function districts(){
    return $this->belongsTo('App\Districts','district_id','id');
}

public function municipals(){
    return $this->belongsTo('App\Municipals','Municipal_uid','id');
}

Municipal:

public function district(){
    return $this->belongsTo('App\Districts','district_id','id');
}


District:

 public function municipal(){
    return $this->hasMany('App\Municipals','id','district_id');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...