mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-06 15:02:47 +08:00
增加Expression类及相关方法
This commit is contained in:
@@ -99,8 +99,11 @@ abstract class Builder
|
||||
|
||||
$result = [];
|
||||
foreach ($data as $key => $val) {
|
||||
$item = $this->parseKey($key, $options);
|
||||
if (is_object($val) && method_exists($val, '__toString')) {
|
||||
$item = $this->parseKey($key, $options, true);
|
||||
if ($val instanceof Expression) {
|
||||
$result[$item] = $val->getValue();
|
||||
continue;
|
||||
} elseif (is_object($val) && method_exists($val, '__toString')) {
|
||||
// 对象数据写入
|
||||
$val = $val->__toString();
|
||||
}
|
||||
@@ -143,7 +146,7 @@ abstract class Builder
|
||||
* @param array $options
|
||||
* @return string
|
||||
*/
|
||||
protected function parseKey($key, $options = [])
|
||||
protected function parseKey($key, $options = [], $strict = false)
|
||||
{
|
||||
return $key;
|
||||
}
|
||||
@@ -184,10 +187,12 @@ abstract class Builder
|
||||
// 支持 'field1'=>'field2' 这样的字段别名定义
|
||||
$array = [];
|
||||
foreach ($fields as $key => $field) {
|
||||
if (!is_numeric($key)) {
|
||||
$array[] = $this->parseKey($key, $options) . ' AS ' . $this->parseKey($field, $options);
|
||||
if ($field instanceof Expression) {
|
||||
$array[] = $field->getValue();
|
||||
} elseif (!is_numeric($key)) {
|
||||
$array[] = $this->parseKey($key, $options) . ' AS ' . $this->parseKey($field, $options, true);
|
||||
} else {
|
||||
$array[] = $this->parseKey($field, $options);
|
||||
$array[] = $this->parseKey($field, $options, true);
|
||||
}
|
||||
}
|
||||
$fieldsStr = implode(',', $array);
|
||||
@@ -264,6 +269,10 @@ abstract class Builder
|
||||
foreach ($where as $key => $val) {
|
||||
$str = [];
|
||||
foreach ($val as $field => $value) {
|
||||
if ($value instanceof Expression) {
|
||||
$str[] = ' ' . $logic . ' ( ' . $value->getValue() . ' )';
|
||||
continue;
|
||||
}
|
||||
if ($value instanceof \Closure) {
|
||||
// 使用闭包查询
|
||||
$query = new Query($this->connection);
|
||||
@@ -305,7 +314,7 @@ abstract class Builder
|
||||
protected function parseWhereItem($field, $val, $rule = '', $options = [], $binds = [], $bindName = null)
|
||||
{
|
||||
// 字段分析
|
||||
$key = $field ? $this->parseKey($field, $options) : '';
|
||||
$key = $field ? $this->parseKey($field, $options, true) : '';
|
||||
|
||||
// 查询规则和条件
|
||||
if (!is_array($val)) {
|
||||
@@ -344,7 +353,9 @@ abstract class Builder
|
||||
$bindName = md5($bindName);
|
||||
}
|
||||
|
||||
if (is_object($value) && method_exists($value, '__toString')) {
|
||||
if ($value instanceof Expression) {
|
||||
|
||||
} elseif (is_object($value) && method_exists($value, '__toString')) {
|
||||
// 对象数据写入
|
||||
$value = $value->__toString();
|
||||
}
|
||||
@@ -556,7 +567,9 @@ abstract class Builder
|
||||
if (is_array($order)) {
|
||||
$array = [];
|
||||
foreach ($order as $key => $val) {
|
||||
if (is_numeric($key)) {
|
||||
if ($val instanceof Expression) {
|
||||
$array[] = $val->getValue();
|
||||
} elseif (is_numeric($key)) {
|
||||
if ('[rand]' == $val) {
|
||||
if (method_exists($this, 'parseRand')) {
|
||||
$array[] = $this->parseRand();
|
||||
|
||||
Reference in New Issue
Block a user