Здесь - пример того, как мы можем определить, была ли таблица уже включена в запрос в Laravel или нет.
public static function isJoined($query, $table)
{
$joins = $query->getQuery()->joins;
if($joins == null) {
return false;
}
foreach ($joins as $join) {
if ($join->table == $table) {
return true;
}
}
return false;
}
Мне нужно извлечь предложения where
в запросе.
У меня есть запрос с условиями join
и некоторыми условиями where
, мне нужно используйте одно из этих where
условий для вложенного выбора.
Теперь мне нужно извлечь предложение where из запроса и использовать его еще раз. Вопрос в том, как определить, содержит ли мой запрос какое-либо условие where
в указанном c столбце таблицы (например, org.id
) в моем запросе Eloquent или нет?
Я пытался извлечь wheres
из запроса следующим образом, но он не похож на то, что мы имеем для объединений
$wheres = $query->getQuery()->wheres;
foreach ($wheres as $where) {
dd(array_keys($where));
}
И то, что я получил:
array:3 [
0 => "type"
1 => "query"
2 => "boolean"
]
Значение type
равно nested
и если я попробую следующий код:
$wheres = $query->getQuery()->wheres;
foreach ($wheres as $where) {
dd($where['query']->wheres);
}
Тогда у меня будет:
array:1 [
0 => array:5 [
"type" => "Basic"
"column" => "org.path"
"operator" => "LIKE"
"value" => "/202001/10000000/12400000%"
"boolean" => "and"
]
]
Теперь, почему первый wheres
возвращает другой объект? Я ожидал такого результата в первом $where
!