2015-12-12 4 views
1

Я пытаюсь запросить одну из моих отношений модели в системе расписания, которую я создаю. У меня есть следующие модели установка:Laravel 5 модели запросов запросов

  • User может иметь много расписаний и может принадлежать ко многим типам сотрудников
  • Timesheet могут иметь множество строк

модели настроены следующий образом:

Модель пользователя:

<?php namespace App\Models\User; 

.... 

class User extends Model implements AuthenticatableContract, CanResetPasswordContract { 

/** 
* The employee types that belong to the user. 
* 
* @return Object 
*/ 
public function employeeTypes() 
{ 
    return $this->belongsToMany('App\Models\User\EmployeeType')->withTimestamps(); 
} 

Timesheet Модель:

<?php namespace App\Models\Timesheet; 

.... 

class Timesheet extends Model 
{  

/** 
* The user that owns the timesheet. 
* 
* @return Object 
*/ 
public function user() 
{ 
    return $this->belongsTo('App\Models\User\User'); 
} 

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

Я попытался следующие ...

$timesheets->with('user')->whereHas('employeeTypes', function ($query) use ($request) { 
    $query->where('name', 'my_employee_type'); 
}); 

... но он дает ошибку ...

Ошибка:

Call to undefined method Illuminate\Database\Query\Builder::employeeTypes()

Кто-нибудь знает, как я добиться этого?

ответ

1

Расписания не имеют такого метода. Этот метод (отношение) существует для пользователя, а не для расписания.

Вы можете попробовать что-то подобное и посмотреть, будет ли это работать.

$timesheets = Timesheet::whereHas('user.employeeTypes', function ($q) { 
    $q->where('name', 'something'); 
})->get();