Я использую 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)
, но нулевое предложение все еще остается;еще хуже то, что получается следующее предложение 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 перед выполнением запроса.Полученный код был:
$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` = ?