#php #laravel #eloquent
#php #laravel #красноречивый
Вопрос:
A User
имеет много Auktion
и Gebot
.
A Gebot
принадлежит одному Auktion
и одному User
Я хочу получить все Auktion
, где User
также есть Gebot
Что-то вроде:
Auth::user()->gebote->auktionen->orderBy('end_time');
OrderBy() должен выполняться на Auktionen
восстановленном via Gebot
, что невозможно, поскольку связь между Auktion и Gebot — один ко многим:
**Gebot Model**
public function auktion()
{
return $this->belongsTo('AppAuktion');
}
public function user()
{
return $this->belongsTo('AppUser');
}
**Auktion Model**
public function gebote()
{
return $this->hasMany('AppGebot', 'auktion_id');
}
public function user()
{
return $this->belongsTo('AppUser');
}
Какова правильная настройка и запрос relationshsip для достижения этого?
Редактировать:
Мой текущий подход таков
@foreach (Auth::user()->gebote as $gebot)
<?php $auktion = $gebot->auktion;
if($auktion->anzeigentyp_id == 2)
continue; ?>
@include('shop/row')
@endforeach
что не очень чисто, поскольку я сначала выбираю все записи, и я не могу orderBy()
Ответ №1:
Используйте whereHas()
, который будет фильтровать ваше отношение по его подчиненности. Auktion
должен иметь отношение hasMany()
к gebots
$userId = Auth::user()->getKey();
AppAuktion::whereHas('gebot', function ($query) use($userId) {
//here you need to filter gebots which belongs to user
$query->where('user_id', $userId);
})->orderBy('end_time')->get();
Комментарии:
1. К сожалению, это не возвращает никаких результатов. Моя
Auktion
модельhasMany()
имеет отношение кGebot
2. Вместо
Auth::user()->auktionen->whereHas()
того, чтобы мы должны использоватьAppAuktion::whereHas()
-> пожалуйста, измените его, и я приму ваш ответ, спасибо