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

Posted

技术标签:

【中文标题】对数据透视表添加的查询为空【英文标题】:Query for pivot table adds is null 【发布时间】:2014-04-14 17:28:01 【问题描述】:

我正在使用 Laravel 4.1 并尝试从数据透视表中检索计数信息。枢轴的名称是 project_subject,它将项目和主题连接在一起。我在主题模型中使用以下内容:

public function getUnassignedCount($projectId)

    return Subject::project()
      ->wherePivot('project_id', $projectId)
      ->wherePivot('assigned', 0)
      ->count();

这会返回如下查询:

projects 内部连接project_subject 中选择count(*) 作为聚合projects.id = project_subject.project_id 其中project_subject.subject_id 为空且project_subjectproject_id = '1' 和 project_subject.assigned = '0'

可以看出,project_subject.subject_id 会自动插入一个空值,这会导致查询不返回任何内容。似乎很奇怪 Laravel 会自动添加我不需要的列。

如何正确查询数据透视表以获得我想要的计数?缺少创建 ProjectSubject 模型。

【问题讨论】:

【参考方案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();

上面返回的是预期的。

【讨论】:

【参考方案2】:

在您的 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();

【讨论】:

谢谢,但我已经按照您的建议尝试了不同的方法,但仍然没有用。意思是,它仍然在我不想包含的字段上添加了“is null”。

以上是关于对数据透视表添加的查询为空的主要内容,如果未能解决你的问题,请参考以下文章

如何使用添加的列作为查询正确更新数据透视表?

数据透视表:隐藏两列不为空的行

在数据表中添加一个字段的SQL语句怎么写

您可以对数据透视表中的行和/或列进行小计吗?

在 Laravel 4 中查询数据透视表

excel中数据透视表,如何将空白的地方隐藏掉