Fix grammar bugs

This commit is contained in:
Dennis Eichhorn 2017-09-14 08:59:09 +02:00
parent 9958f81c08
commit a4e277184e
3 changed files with 39 additions and 5 deletions

View File

@ -2239,11 +2239,14 @@ class DataMapperAbstract implements DataMapperInterface
*/
public static function getPrimaryKeyBy($refKey, string $ref) : array
{
$query = self::getQuery();
$query->select(static::$primaryField)
$query = new Builder(self::$db);
$query->prefix(self::$db->getPrefix())
->select(static::$table . '.' . static::$primaryField)
->from(static::$table)
->where(static::$table . '.' . $ref, '=', $refKey);
var_dump($query->toSql());
$sth = self::$db->con->prepare($query->toSql());
$sth->execute();
@ -2493,6 +2496,6 @@ class DataMapperAbstract implements DataMapperInterface
}
}
throw \Exception();
throw new \Exception('Invalid member name');
}
}

View File

@ -172,7 +172,7 @@ abstract class GrammarAbstract
foreach ($elements as $key => $element) {
if (is_string($element) && $element !== '*') {
if(strpos($element, '.')) {
if(strpos($element, '.') === false) {
$prefix = '';
}
@ -191,6 +191,37 @@ abstract class GrammarAbstract
return rtrim($expression, ', ');
}
/**
* Expressionize elements.
*
* @param array $elements Elements
* @param string $prefix Prefix for table
*
* @return string
*
* @since 1.0.0
*/
protected function expressionizeTable(array $elements, string $prefix = '') : string
{
$expression = '';
foreach ($elements as $key => $element) {
if (is_string($element) && $element !== '*') {
$expression .= $this->compileSystem($element, $prefix) . ', ';
} elseif (is_string($element) && $element === '*') {
$expression .= '*, ';
} elseif ($element instanceof \Closure) {
$expression .= $element() . ', ';
} elseif ($element instanceof BuilderAbstract) {
$expression .= $element->toSql() . ', ';
} else {
throw new \InvalidArgumentException();
}
}
return rtrim($expression, ', ');
}
/**
* Compile system.
*

View File

@ -169,7 +169,7 @@ class Grammar extends GrammarAbstract
*/
protected function compileFrom(Builder $query, array $table) : string
{
$expression = $this->expressionizeTableColumn($table, $query->getPrefix());
$expression = $this->expressionizeTable($table, $query->getPrefix());
if ($expression === '') {
return '';