在我的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变量,以加载到我的视图中?这是否应该使用视图作曲家,即使它们只出现在一个视图中?
编辑:基本上我试图在视图中列出所有作业并在它们旁边显示,它们各自的消息计数
答案 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();
}