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

Laravel views - passing multiple arrays to a view

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

我的数据库的结构使得当用户点击一个职位并发送消息时,对话中的一行 table 被创建,其中包含职位的 ID(我的详细架构可以在这里找到: http://www.laravelsd.com/share/8nBZmc)

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

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

不清楚是什么问题,但我想你想用所有的作业 ID 来计算,对吗?

如果是这样的话,这就是您需要的:

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();
}