From 0275a2244f71730ed015d19d6e15f9319b7788e0 Mon Sep 17 00:00:00 2001 From: Klimov Paul Date: Wed, 13 Nov 2013 20:48:05 +0200 Subject: [PATCH] Option array value support added to "yii\sphinx\Query" --- extensions/sphinx/QueryBuilder.php | 24 ++++++++++++++++++++++-- tests/unit/extensions/sphinx/QueryTest.php | 4 ++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/extensions/sphinx/QueryBuilder.php b/extensions/sphinx/QueryBuilder.php index 860e629..ef3628d 100644 --- a/extensions/sphinx/QueryBuilder.php +++ b/extensions/sphinx/QueryBuilder.php @@ -871,8 +871,28 @@ class QueryBuilder extends Object if ($value instanceof Expression) { $actualValue = $value->expression; } else { - $actualValue = self::PARAM_PREFIX . count($params); - $params[$actualValue] = $value; + if (is_array($value)) { + $actualValueParts = []; + foreach ($value as $key => $valuePart) { + if (is_numeric($key)) { + $actualValuePart = ''; + } else { + $actualValuePart = $key . ' = '; + } + if ($valuePart instanceof Expression) { + $actualValuePart .= $valuePart->expression; + } else { + $phName = self::PARAM_PREFIX . count($params); + $params[$phName] = $valuePart; + $actualValuePart .= $phName; + } + $actualValueParts[] = $actualValuePart; + } + $actualValue = '(' . implode(', ', $actualValueParts) . ')'; + } else { + $actualValue = self::PARAM_PREFIX . count($params); + $params[$actualValue] = $value; + } } $optionLines[] = $name . ' = ' . $actualValue; } diff --git a/tests/unit/extensions/sphinx/QueryTest.php b/tests/unit/extensions/sphinx/QueryTest.php index 36bf95d..3a7d2c3 100644 --- a/tests/unit/extensions/sphinx/QueryTest.php +++ b/tests/unit/extensions/sphinx/QueryTest.php @@ -131,6 +131,10 @@ class QueryTest extends SphinxTestCase ->where("MATCH('about')") ->options([ 'cutoff' => 50, + 'field_weights' => [ + 'title' => 10, + 'content' => 3, + ], ]) ->all($connection); $this->assertNotEmpty($rows);