private function parseWhereToSQLFragments(array $where, $useAlias = true)
{
$builder = $this->builder();
$sqlFragments = [];
foreach ($where as $column => $value) {
// Column name with comparison operator
$colData = explode(' ', $column);
$operator = isset($colData[1]) ? $colData[1] : '=';
if (count($colData) > 2) {
$operator = array_pop($colData);
$colData = [implode(' ', $colData), $operator];
}
$operatorCallable = $this->getWhereOperatorCallable(strtolower($operator));
if (!$operatorCallable) {
throw new \InvalidArgumentException("Unsupported operator '" . $operator . "' " . "in WHERE clause. If you want to use a custom operator, you " . "can add one with \\Spot\\Query::addWhereOperator('" . $operator . "', " . "function (QueryBuilder \$builder, \$column, \$value) { ... }); ");
}
$col = $colData[0];
// Handle DateTime value objects
if ($value instanceof \DateTime) {
$mapper = $this->mapper();
$convertedValues = $mapper->convertToDatabaseValues($mapper->entity(), [$col => $value]);
$value = $convertedValues[$col];
}
// Prefix column name with alias
if ($useAlias === true) {
$col = $this->fieldWithAlias($col);
}
$sqlFragments[] = $operatorCallable($builder, $col, $value);
}
return $sqlFragments;
}