#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