对数据透视表添加的查询为空

时间:2014-04-14 17:28:02

标签: laravel-4 pivot-table

我正在使用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_subjectproject_id其中{{ 1}}。project_subject为空且subject_idproject_subject =' 1'和project_idproject_subject =' 0'

可以看出,assignedproject_subject会自动插入空值,导致查询不返回任何内容。似乎奇怪的Laravel会自动添加一条我不想要的专栏。

如何正确查询数据透视表以获取我想要的数量?没有创建ProjectSubject模型。

2 个答案:

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