Красноречивый список доступа к моделям через модели

#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() -> пожалуйста, измените его, и я приму ваш ответ, спасибо