2015-03-09 5 views
1

Я искал онлайн и, похоже, не понял этого. У меня есть две таблицы: Команды и таблицы TeamMembers. Команда может иметь одного или нескольких членов команды, поэтому это отношения «один ко многим».Яркая фильтровальная коллекция с нетерпением Загрузка

Вот основные из двух таблиц:

class Team extends Base\EloquentBase 
     { 
      // Relationship 
      public function teamMembers() 
      { 
      return $this->hasMany('TeamClock\Eloquent\Models\TeamMember', 'team_id', 'team_id'); 
      } 
     } 

     class TeamMember extends Base\EloquentBase 
     { 
      // Relationship 
      public function team() 
      { 
      return $this->belongsTo('TeamClock\Eloquent\Models\Team', 'team_id', 'team_id'); 

      // Scope 
      public function scopeHasDailyPerDiem($q) 
      { 
      return $q->where('is_daily_per_diem', '>', 0); 
      } 
     } 

Как вы можете видеть, у меня есть область в классе командного игрока, и я хочу, чтобы все команды с членами команды, которые имеют столбец «is_daily_per_diem» больше 0.

у меня есть контроллер тестов, и я демпинг из результатов:

$teams = Team::has('teamMembers')->with(array('teamMembers' => function($query){ 
       $query->hasDailyPerDiem(); 
     }))->get(); 

Вот что я получаю, когда выгрузка:

[0] => Array 
     (
      [team_id] => 55 
      [phase_id] => value 
      [team_name] => value 
      [team_member_quota] => value 
      [team_member_overstaff] => value 
      [published] => value 
      [tools_required] => value 
      [dress_code] => value 
      [special_instructions] => value 
      [team_members] => Array 
       (
       ) 

     ) 
... 
[41] => Array 
     (
      [team_id] => 115 
      [phase_id] => value 
      [team_name] => value 
      [team_member_quota] => value 
      [team_member_overstaff] => 0 
      [published] => 1 
      [tools_required] => 
      [dress_code] => 
      [special_instructions] => 
      [team_members] => Array 
       (
        [0] => Array 
         (
          [team_member_id] => value 
          [team_id] => 115 
          [position_id] => value 
          [employee_id] => value 
          [team_auth_id] => 1 
          [progress_auth_id] => 2 
          [is_daily_per_diem] => 1 
          [daily_per_diem] => 60.00 
          [pay_type_id] => 1 
          [flat_rate] => 
          [is_active] => 0 
          [per_diem_beg_date] => 
          [per_diem_end_date] => 
          [beg_shift_id] => 
          [end_shift_id] => 
          [assign_email_guid] => value 
         ) 

       ) 

     ) 

Как вы можете видеть, я получаю смесь команд с членами команды (это ежедневно в день) 0 и команды с пустыми членами команды.

Есть ли способ устранить команды с пустыми членами команды?

Я также попытался это и другие вещи в моем тестовом контроллере:

$teams = Team::whereHas('teamMembers', function($query){ 
      $query->hasDailyPerDiem(); 
     })->get(); 

, но это возвращает массив всех членов команды с «находится в ежедневной командировочные» больше нуля, но я не получаю любая информация о команде:

[0] => Array 
     (
      [team_id] => 55 
      [phase_id] => value 
      [team_name] => value 
      [team_member_quota] => value 
      [team_member_overstaff] => value 
      [published] => value 
      [tools_required] => value 
      [dress_code] => value 
      [special_instructions] => value 
     ) 
... 
[36] => Array 
     (
      [team_id] => 115 
      [phase_id] => value 
      [team_name] => value 
      [team_member_quota] => value 
      [team_member_overstaff] => value 
      [published] => value 
      [tools_required] => value 
      [dress_code] => value 
      [special_instructions] => value 
     ) 

Любая помощь очень ценится !!!

ответ

1

Вы почти там ...

Если вы хотите, чтобы фильтровать команды и нетерпеливых пользователей нагрузки:

$teams = Team::with('teamMembers')->whereHas('teamMembers', function($query){ 
      $query->hasDailyPerDiem(); 
     })->get(); 

И если вы хотите, чтобы фильтровать команды и нетерпеливых нагруженных членов:

$teams = Team::with(['teamMembers' => function($query){ 
      $query->hasDailyPerDiem(); 
     }])->whereHas('teamMembers', function($query){ 
      $query->hasDailyPerDiem(); 
     })->get(); 

Если вы хотите уменьшить дублирующийся код вторым блоком кода, поместите закрытие фильтра в переменную:

$filter = function($query){ 
    $query->hasDailyPerDiem(); 
}; 

$teams = Team::with(['teamMembers' => $filter]) 
      ->whereHas('teamMembers', $filter) 
      ->get(); 
+0

спасибо !!!! Первый вариант не сработал, потому что я получаю все команды с членами команды с или без суточных, но второй - тот, который мне нужен !!! – FNMT8L9IN82

+0

Добро пожаловать. Но я уверен, что первый из вас даст вам правильные * команды *, но со всеми их членами, независимо от суточных. В любом случае, рад, что я мог бы помочь! – lukasgeiter

+0

Хорошо ... Я рассмотрю его более подробно. Тем временем, я получил свое признание! – FNMT8L9IN82

Смежные вопросы