对数据透视表添加的查询为空
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_subject
。 project_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”。以上是关于对数据透视表添加的查询为空的主要内容,如果未能解决你的问题,请参考以下文章