Laravel Eloquent 多对多查询产生额外的 null WHERE 子句

Laravel Eloquent Many-To-Many Query Producing Extra null WHERE clause

我正在使用 Eloquent 从包含三个表的查询中生成结果:

photos              (id)
photos_to_photosets (photo_id, photoset_id)
photosets           (id)

我的模型的多对多关系定义为:

class Photo extends Model
{
    public function photosets()
    {
        return $this->hasMany(PhotoSet::class, 'photos_to_photo_sets');
    }
}

class PhotoSets extends Model
{
    public function photos()
    {
        return $this->belongsToMany(Photo::class, 'photos_to_photo_sets');
    }

}

现在,为了获取结果,我不得不使用以下 Eloquent 代码:

$photoData = $this->photoSets->photos()
                             ->orWhere('photo_set_id', '=', $id)
                             ->get();

这会产生以下查询:

SELECT * FROM `photos` 
INNER JOIN `photos_to_photo_sets` 
     ON `photos`.`id` = `photos_to_photo_sets`.`photo_id` 
WHERE `photos_to_photo_sets`.`photo_set_id` is null 
     OR `photo_set_id` = ?

此查询有效,但我似乎无法从查询中删除 WHERE `photos_to_photo_sets`.`photo_set_id` is null

我试过只使用 ->where('photo_set_id', '=', $id) 但 null 子句仍然存在;更糟糕的是,它会产生以下 WHERE 子句:

... WHERE `photos_to_photo_sets`.`photo_set_id` IS NULL 
        AND `photo_set_id` = ?

有什么方法可以利用 Eloquent 删除这个空的 WHERE 子句段吗?

理想情况下,我想以以下查询结束:

SELECT * FROM `photos` 
INNER JOIN `photos_to_photo_sets` 
     ON `photos`.`id` = `photos_to_photo_sets`.`photo_id` 
WHERE `photo_set_id` = ?

提前感谢您的帮助!

更新

根据@Jonas Staudenmeir 的回答,空 WHERE 子句已被删除。

为此,我在 运行 查询之前设置了 photoSet 的模型 ID。生成的代码是:

$this->photoSets->id = $photoset_id;

$photoData = $this->photoSets->photos()->get();

产生了:

SELECT * FROM `photos` 
INNER JOIN `photos_to_photo_sets` 
     ON `photos`.`id` = `photos_to_photo_sets`.`photo_id` 
WHERE `photo_set_id` = ?

注入的模型没有 id:

$this->photoSet->id = $id;

那么你不需要额外的约束:

$photoData = $this->photoSets->photos;