Laravel视图 - 将多个数组传递给视图

时间:2015-04-14 22:38:39

标签: php mysql laravel eloquent

在我的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'));
}

我的数据库是结构化的,当用户点击作业并发送消息时,会在会话表中创建一行,其中包含作业的ID(我的详细架构可在此处找到:http://www.laravelsd.com/share/8nBZmc

count函数应该取决于作业的ID,但是,如何将$ jobs数组中的id传递给$ count变量,以加载到我的视图中?这是否应该使用视图作曲家,即使它们只出现在一个视图中?

编辑:基本上我试图在视图中列出所有作业并在它们旁边显示,它们各自的消息计数

1 个答案:

答案 0 :(得分: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'));
}

编辑:

如果您只需要为每个作业计算消息,请执行以下操作:

工作模式:

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

因此,在您的视图中,您可以直接调用消息:

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

或者,如果您渴望加载消息关系:

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