Связывает отношения «несколько к одному» в Laravel

#mysql #laravel #eloquent

#mysql #laravel #красноречивый

Вопрос:

У меня есть 3 модели: пользователь, запрос, предложение. Связь заключается в том, что у пользователя много запросов, а у запроса много предложений.

В контроллере я использую $queries=User->query()->get(); ( query() это метод hasMany в пользовательской модели) и передаю его для просмотра в качестве параметра. В представлении я хочу отобразить таблицу запросов от одного пользователя и подсчитать все предложения, сделанные для каждого запроса.

На самом деле то, что я хочу получить, — это вложенный объект $ queries, например

 user:
  query1:
    offer1
    offer2
  query2:
    offer3
    offer4
  

Как это должно быть связано в моделях и как использовать его в контроллере и представлении?

Ответ №1:

У вас может быть что-то вроде:

 Class User extends Model{

protected $table = 'users';

public function query(){

  return $this->hasMany('AppQuery');

}

}

Class Query extends Model{

protected $table = 'queries';

public function offer(){

  return $this->hasMany('AppOffer');

}

public function user(){

return $this->belongsto('AppUser');

}

}

Class Offer extends Model{

protected $table = 'offers';

public function query(){

  return $this->belongsTo('AppQuery');

}

}
  

Тогда в вашем контроллере у вас может быть что-то вроде этого:

 public function showUser($id){

$user = User::with('query.offer')->find($id);
return View::make('user')->with('user', $user);

}
  

Тогда, на ваш взгляд, у вас может быть что-то вроде:

 @foreach($user->query as $query)
   {{$query->title}}
      @foreach($query->offer as $offer)
         {{$offer->title}}
         {{$offer->amount}}
      @endforeach
@endforeach