Используя отношения в моделях Laravel, как получить данные в блейд-файле? - PullRequest
0 голосов
/ 05 апреля 2019

Я запрашиваю данные из базы данных с двумя таблицами.

  1. Нагрузки:
    • LoadId
    • OriginStopId
    • DestStopId
  2. Остановки:
    • id
    • Город
    • Штат
    • loadId

Нагрузка может иметь несколько остановок, но остановка имеет одну нагрузку.Нагрузка имеет минимум две остановки отправления и назначения.

Я создал модели как

class LoadsModel extends Model
{
    protected $table = 'loads';
    public function stops(){
    return $this->hasMany('App\Stops');
    }
}

и

class Stops extends Model
{
   protected $table = 'stops';
   public function loads(){
    return $this->belongsTo('App\LoadsModel');
   }
}

Я использую модель для передачи модели в вид.

  public function index()
  {
      $loads = LoadsModel::orderBy('loadId')->get();
      return view('tender.available')->with(['loads'=>$loads]);
  }

Я хочу показать результат в блейде в соответствии с заголовками таблицы, где исходный город является исходным городом остановки, чей идентификатор совпадает с origininstopId в таблице нагрузок и целевым городомостановка с идентификатором destStopId в таблице нагрузок.Я хочу показать количество остановок груза.Как то так.

<table class="table">
    <tr>
       <th>Origin City</th>
       <th>Origin State</th>
       <th>Destination City</th>
       <th>Destination State</th>
       <th>Load Id</th>
       <th>Stops</th>
    </tr>
</table>

1 Ответ

0 голосов
/ 06 апреля 2019

Вы должны использовать цикл foreach для доступа к каждому атрибуту из каждой загрузки:

@foreach($loads as $load)
 <tr>
     <th>{{$load->id}}</th>
              .
              .
              .
     <th>{{$load->anyAttributeYouWant}}</th>

     @foreach($load->stops as $stop)
         <th>{{$stop->id}}</th>
         <th>{{$stop->city}}</th>
         <th>{{$stop->state}}</th>
     @endforeach
 </tr>
@endforeach

Я также сделал foreach в вашем отношении стопов, чтобы вы могли показать все атрибуты стопов.

Вы можете посчитать остановки от нагрузки, используя withCount метод :

public function index()
{
    $loads = LoadsModel::orderBy('loadId')->withCount('stops')->get();
    return view('tender.available')->with(['loads'=>$loads]);
}

Вы можете получить доступ к количеству в вашем представлении следующим образом:

{{$load->stops_count}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...