Приветствую всех.Laravel ManyToMany Регистрация Состояние
Как я могу добавить условие для «join on» для атрибута ownToMany (многие ко многим) в Laravel 5.3?
Например, предположим, что это Продукты и параметры этих продуктов со многими отношениями. Когда я хочу получить все параметры для конкретного продукта, это просто отлично. Я $product->parameters
, и это дает мне то, что мне нужно с запросом так:
SELECT
parameters.*,
product_parameters.product_id AS pivot_product_id,
product_parameters.parameter_id AS pivot_parameter_id
FROM parameters
INNER JOIN product_parameters ON parameters.id = product_parameters.parameter_id
WHERE product_parameters.product_id = 1;
Проблема возникает, когда я хочу, чтобы определить, какой-то «Global» флаг на параметр, который определяет, что параметр должен быть привязан к каждому продукту. С простым SQL, все, что нужно сделать, это добавить условие JOIN, ИЛИ parameters.global = 1, например:
SELECT
parameters.*,
product_parameters.product_id AS pivot_product_id,
product_parameters.parameter_id AS pivot_parameter_id
FROM parameters
INNER JOIN product_parameters ON parameters.id = product_parameters.parameter_id OR parameters.global = 1
WHERE product_parameters.product_id = 1;
Но я не нашел, если есть правильный и чистый способ сделать он с Laravel сможет вернуть объект Eloquent \ Relation из функции с дополнительными данными, которые мне нужны.
Я нашел «плохой» способ, который должен «получить» соединение, которое мне нужно от объекта построителя запроса, и добавить к нему еще одно «где», но он очень уродлив, и я не уверен, что он будет работать в будущем без проблем.
Это то, что я пытался сделать, и это почти получилось (есть проблема с некорректным числом параметров PDO, но он генерирует SQL, которые мне нужно):
$relation = $this->belongsToMany(Parameter::class, 'product_parameters');
$relation->getQuery()->getQuery()->joins[0]->where('parameters.definition', '=', 0, 'or');
Любая помощь или совет ценится. Спасибо.