2015-04-14 4 views
2

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

public function index() 
{ 
    $jobs = $this->job->getUsersOwnJobs(Auth::id()); 

    $jobId = $jobs['id']; // This is an example of what I'm trying to do 
    $count = $this->message->model->whereHas('conversation.job', 
     function($q) use ($jobId) { 
      $q->where('id', $jobId); 
     }) 
    ->count(); 

    return view('myjobs.index', compact('jobs', 'count')); 
} 

Моя база данных структурирована таким образом, что, когда пользователь нажимает на работу и отправляет сообщение, строку в таблице разговора создается который содержит идентификатор задания (моя подробная схема может быть найдена здесь: http://www.laravelsd.com/share/8nBZmc)

Функция count должна зависеть от идентификатора задания, однако, как я передаю идентификатор из массива $ jobs, в переменную count count, t o загрузить мои взгляды? Должны ли это использоваться композиторы представления, хотя они будут отображаться только в одном представлении?

EDIT: В основном я пытаюсь перечислить все задания в представлении и отображения рядом с ними, подсчитывать их соответствующие сообщения

ответ

1

Это не ясно, что этот вопрос, но я думаю, что вы хотите посчитать, используя все Идентификаторы заданий, правильно?

Так что, если это так, вот что вам нужно:

public function index() 
{ 
    $jobs = $this->job->getUsersOwnJobs(Auth::id()); 

    $jobsIds = $jobs->lists('id'); // this will give you an array with all the ids of the jobs you want. 

    $count = $this->message->model->whereHas('conversation', 
     function($q) use ($jobId) { 
      $q->whereIn('job_id', $jobsIds); 
     }) 
    ->count(); 

    return view('myjobs.index', compact('jobs', 'count')); 
} 

Edit:

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

Работа Модель:

public function messages() 
{ 
    return $this->hasManyThrough('Message', 'Conversation'); 
} 

Итак, на ваш взгляд можно назвать сообщения прямо:

foreach($jobs as $job) 
{ 
    $job->messages()->count(); 
} 

или, если вы готовы погрузили сообщений соотношение:

foreach($jobs as $job) 
{ 
    $job->messages->count(); 
} 
+0

отличное предложение использовать hasManyThrough на модели работы! Дальше +1 для обеспечения энергичных загруженных отношений! –

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