我正在使用Laravel 4.1并尝试从数据透视表中检索计数信息。 pivot的名称是project_subject,它将项目和主题连接在一起。我在主题模型中使用以下内容:
public function getUnassignedCount($projectId)
{
return Subject::project()
->wherePivot('project_id', $projectId)
->wherePivot('assigned', 0)
->count();
}
这将返回如下查询:
从projects
上的project_subject
内部加入projects
选择计数(*)作为汇总。id
= project_subject
。project_id
其中{{ 1}}。project_subject
为空且subject_id
。project_subject
=' 1'和project_id
。project_subject
=' 0'
可以看出,assigned
。project_subject
会自动插入空值,导致查询不返回任何内容。似乎奇怪的Laravel会自动添加一条我不想要的专栏。
如何正确查询数据透视表以获取我想要的数量?没有创建ProjectSubject模型。
答案 0 :(得分:1)
我使用了这里发布的自定义数据透视模型: https://github.com/laravel/framework/issues/2093#issuecomment-39154456
我没有在我的问题中使用上面的代码,而是使用了对newPivot的调用:
public function getUnassignedSubjectsCount($projectId)
{
$pivot = Project::newPivot($this, $this->attributes, 'project_subject', true);
return $pivot->where('project_id', 1)->where('assigned', 0)->count();
}
以上回报了预期。
答案 1 :(得分:0)
在where语句中,根据Laravel API
缺少运算符值public BelongsToMany wherePivot(string $ column,string $ operator = null,mixed $ value = null,string $ boolean ='and')
public function getUnassignedCount($projectId)
{
return Subject::project()
->wherePivot('project_id', $projectId)
->wherePivot('assigned', '=', 0)
->count();
}