【问题标题】: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 模型。

【问题讨论】:

    标签: laravel-4 pivot-table


    【解决方案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”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      相关资源
      最近更新 更多