2016-10-12 4 views
0

У меня сложная настройка, которая включает следующие таблицы.Laravel Eloquent multiple tables

Customers 
Transactions 
Jobs 
Rounds 
Job_Rounds 

Я хочу вывести всех клиентов, которые просрочены. Я сделал это с помощью следующего запроса:

$data = Auth::user()->clients()->leftjoin('transactions','clients.id','=','transactions.client_id') 
       ->select(DB::raw('sum(gross) as value, email, first_name, last_name, mobile, clients.id, addressline1')) 
       ->groupBy('id','first_name','last_name','email','mobile','addressline1', 'clients.id') 
       ->havingRaw('SUM(gross) < 0') 
       ->get(); 

Это возвращает все клиент, которые просрочены, который является большим, но теперь я хочу, чтобы иметь возможность фильтровать просроченные клиент по раунду.

Мои отношения заключаются в следующем:

Customers > Jobs.client_id 
Customers > Transactions.client_id 
Jobs > Rounds via Jobs_Rounds 

я бы перейти на мой контроллер в round_id данного раунда, а затем попытаться отфильтровать результаты, основанные на round_id. единственное место, где я храню идентификатор раунда, находится в таблице jobs_rounds, и эта таблица содержит только job_id & round_id.

ответ

0

Я думаю об использовании отношения HasManyThrough для ссылки Customer и Round.

Что-то вроде этого:

// Customer.php 
public function rounds() 
{ 
    return $this->hasManyThrough(Round::class, Job::class, 'client_id', 'job_id', 'id'); 
} 

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

$data = Auth::user()->clients() 
      ->whereHas('rounds', function ($query) { 
       $query->where('id', request()->input('round_id')) 
      }) 
      //... the rest of your filters 
+0

Благодаря Саймон, я попытался это, но я, кажется, имею вопрос .. Когда я return Client :: First() -> раунды Я ожидал увидеть раунды клиентов, но я получаю сообщение об ошибке: Столбец не найден: 1054 Неизвестный столбец «rounds.job_id» - связь между раундом и клиентом будет проходить через. Job который связан с клиентом, задание связано с раундом через job_rounds –

+0

Работа может быть на многих r ounds, следовательно, таблица job_rounds:/ –

+0

Кажется, что у вас нет 'job_id' в таблице' rounds' – SimonDepelchin