2015-02-27 5 views
0

В основном, я пытаюсь добавить переменную (которая является значением) для каждого пользователя, в этом случае значение показывает расчет, который необходимо выполнить для каждого пользователя, но не уверен, что его право и как получить что значение с точки зрения:Добавление переменной к каждому пользователю

контроллер

$users = User::all(); 
    foreach ($users as $user) { 

     // Gets past events assigned to user 
     $past_sessions = count(User::pastUserTraining($user->id)->get()); 
     // Gets past events attended 
     $amount_attended = count(User::amountTraingAttended($user->id)->get()); 

     // if no past events 
     if($past_sessions == 0){ 
      $res = 0; 
     } 
     else{ 
      $res = ($amount_attended/$past_sessions) * 100; 
     } 

     //Rounds number to whole number 
     $res = round($res); 
    } 

    // load the view and pass the users with pes(value for each) 
    return View::make('attendance.index') 
       ->with('users', $users) 
       ->with('pes', $res); 
} 

Посмотреть

@foreach($users as $key => $value) 
    <tr class="users"> 
    <td>{{ ucfirst($value->firstName), ' ', ucfirst($value->lastName) }}</td> 
    <td>{{ $pes }}<td> 
@endforeach 

Таким образом, в теории я хочу его возвращения с

имя пользователя, значение

имя пользователя, значение

На данный момент она возвращает

имя, такое же значение для всех пользователей последнего расчета,

я знаю, что мои методы работы, как я могу показать расчет для человека просто не все на той же странице

ответ

0

Вы можете попробовать его таким образом, используя Accessor;

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

class User extends Eloquent { 
    ... 

    public function getPesAttribute(){ 
     // Gets past events assigned to user 
     $past_sessions = count(self::pastUserTraining($this->id)->get()); 
     // Gets past events attended 
     $amount_attended = count(self::amountTraingAttended($this->id)->get()); 

     // if no past events 
     if($past_sessions == 0){ 
      return 0; 
     } 

     $res = ($amount_attended/$past_sessions) * 100; 

     //Rounds number to whole number 
     return round($res); 
    } 

    ... 
} 

Тогда в ваш вид просто получить эти данные с помощью $value->pes;.

Тогда вы можете избавиться от всего этого из своего контроллера. Вот так;

$users = User::all(); 

// load the view and pass the users with pes(value for each) 
return View::make('attendance.index') 
      ->with('users', $users); 

Обратите внимание: Это не был проверен.

0

Вы можете сделать этот расчет на модели пользователя.

Вид:

@foreach($users as $user) 
    <tr class="users"> 
    <td>{{ ucfirst($user->firstName), ' ', ucfirst($user->lastName) }}</td> 
    <td>{{ $user->attendedRatio() }}<td> 
@endforeach 

На пользовательской модели вы можете сделать

public function attendedRatio() { 
    // Gets past events assigned to user 
    $past_sessions = User::pastUserTraining($this->id)->count(); 
    // Gets past events attended 
    $amount_attended = User::amountTraingAttended($this->id)->count(); 

    // if no past events 
    if($past_sessions == 0){ 
     return 0 
    } 

    $ratio = ($amount_attended/$past_sessions) * 100; 

    //Rounds number to whole number 
    return round($ratio); 
} 

еще лучше, почему (быстрее) будет использовать соединение, использующее Eloquent hasMany отношение и доступ к колу. но это легко понять sollution

+0

как бы я установил этот атрибут для заказа, так что топ имеет лучшее ??? –

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