Browse Source

renamed elasticsearch PK to id

tags/2.0.0-beta
Carsten Brandt 11 years ago
parent
commit
af5d87ac4d
  1. 8
      framework/yii/elasticsearch/ActiveQuery.php
  2. 34
      framework/yii/elasticsearch/ActiveRecord.php
  3. 22
      framework/yii/elasticsearch/QueryBuilder.php
  4. 2
      tests/unit/data/ar/elasticsearch/Customer.php
  5. 10
      tests/unit/data/ar/elasticsearch/Order.php
  6. 4
      tests/unit/data/ar/elasticsearch/OrderItem.php
  7. 67
      tests/unit/framework/elasticsearch/ActiveRecordTest.php

8
framework/yii/elasticsearch/ActiveQuery.php

@ -92,7 +92,7 @@ class ActiveQuery extends Query implements ActiveQueryInterface
if ($this->asArray) { if ($this->asArray) {
foreach($models as $key => $model) { foreach($models as $key => $model) {
$models[$key] = $model['_source']; $models[$key] = $model['_source'];
$models[$key]['primaryKey'] = $model['_id']; $models[$key][ActiveRecord::PRIMARY_KEY_NAME] = $model['_id'];
} }
} }
if (!empty($this->with)) { if (!empty($this->with)) {
@ -116,7 +116,7 @@ class ActiveQuery extends Query implements ActiveQueryInterface
} }
if ($this->asArray) { if ($this->asArray) {
$model = $result['_source']; $model = $result['_source'];
$model['primaryKey'] = $result['_id']; $model[ActiveRecord::PRIMARY_KEY_NAME] = $result['_id'];
} else { } else {
/** @var ActiveRecord $class */ /** @var ActiveRecord $class */
$class = $this->modelClass; $class = $this->modelClass;
@ -137,7 +137,7 @@ class ActiveQuery extends Query implements ActiveQueryInterface
{ {
$record = parent::one($db); $record = parent::one($db);
if ($record !== false) { if ($record !== false) {
if ($field == 'primaryKey') { if ($field == ActiveRecord::PRIMARY_KEY_NAME) {
return $record['_id']; return $record['_id'];
} elseif (isset($record['_source'][$field])) { } elseif (isset($record['_source'][$field])) {
return $record['_source'][$field]; return $record['_source'][$field];
@ -151,7 +151,7 @@ class ActiveQuery extends Query implements ActiveQueryInterface
*/ */
public function column($field, $db = null) public function column($field, $db = null)
{ {
if ($field == 'primaryKey') { if ($field == ActiveRecord::PRIMARY_KEY_NAME) {
$command = $this->createCommand($db); $command = $this->createCommand($db);
$command->queryParts['fields'] = []; $command->queryParts['fields'] = [];
$rows = $command->queryAll()['hits']; $rows = $command->queryAll()['hits'];

34
framework/yii/elasticsearch/ActiveRecord.php

@ -27,6 +27,8 @@ use yii\helpers\StringHelper;
*/ */
class ActiveRecord extends \yii\db\ActiveRecord class ActiveRecord extends \yii\db\ActiveRecord
{ {
const PRIMARY_KEY_NAME = 'id';
private $_id; private $_id;
private $_version; private $_version;
@ -48,8 +50,8 @@ class ActiveRecord extends \yii\db\ActiveRecord
{ {
$query = static::createQuery(); $query = static::createQuery();
if (is_array($q)) { if (is_array($q)) {
if (count($q) == 1 && (array_key_exists('primaryKey', $q))) { if (count($q) == 1 && (array_key_exists(ActiveRecord::PRIMARY_KEY_NAME, $q))) {
return static::get($q['primaryKey']); return static::get($q[ActiveRecord::PRIMARY_KEY_NAME]);
} }
return $query->where($q)->one(); return $query->where($q)->one();
} elseif ($q !== null) { } elseif ($q !== null) {
@ -68,7 +70,6 @@ class ActiveRecord extends \yii\db\ActiveRecord
* for more details on these options. * for more details on these options.
* @return static|null The record instance or null if it was not found. * @return static|null The record instance or null if it was not found.
*/ */
public static function get($primaryKey, $options = []) public static function get($primaryKey, $options = [])
{ {
if ($primaryKey === null) { if ($primaryKey === null) {
@ -132,12 +133,17 @@ class ActiveRecord extends \yii\db\ActiveRecord
// TODO implement copy and move as pk change is not possible // TODO implement copy and move as pk change is not possible
public function getId()
{
return $this->_id;
}
/** /**
* Sets the primary key * Sets the primary key
* @param mixed $value * @param mixed $value
* @throws \yii\base\InvalidCallException when record is not new * @throws \yii\base\InvalidCallException when record is not new
*/ */
public function setPrimaryKey($value) public function setId($value)
{ {
if ($this->isNewRecord) { if ($this->isNewRecord) {
$this->_id = $value; $this->_id = $value;
@ -152,7 +158,7 @@ class ActiveRecord extends \yii\db\ActiveRecord
public function getPrimaryKey($asArray = false) public function getPrimaryKey($asArray = false)
{ {
if ($asArray) { if ($asArray) {
return ['primaryKey' => $this->_id]; return [ActiveRecord::PRIMARY_KEY_NAME => $this->_id];
} else { } else {
return $this->_id; return $this->_id;
} }
@ -165,7 +171,7 @@ class ActiveRecord extends \yii\db\ActiveRecord
{ {
$id = $this->isNewRecord ? null : $this->_id; $id = $this->isNewRecord ? null : $this->_id;
if ($asArray) { if ($asArray) {
return ['primaryKey' => $id]; return [ActiveRecord::PRIMARY_KEY_NAME => $id];
} else { } else {
return $this->_id; return $this->_id;
} }
@ -180,7 +186,7 @@ class ActiveRecord extends \yii\db\ActiveRecord
*/ */
public static function primaryKey() public static function primaryKey()
{ {
return ['primaryKey']; return [ActiveRecord::PRIMARY_KEY_NAME];
} }
/** /**
@ -218,7 +224,7 @@ class ActiveRecord extends \yii\db\ActiveRecord
*/ */
public static function create($row) public static function create($row)
{ {
$row['_source']['primaryKey'] = $row['_id']; $row['_source'][ActiveRecord::PRIMARY_KEY_NAME] = $row['_id'];
$record = parent::create($row['_source']); $record = parent::create($row['_source']);
return $record; return $record;
} }
@ -317,10 +323,10 @@ class ActiveRecord extends \yii\db\ActiveRecord
*/ */
public static function updateAll($attributes, $condition = [], $params = []) public static function updateAll($attributes, $condition = [], $params = [])
{ {
if (count($condition) == 1 && isset($condition['primaryKey'])) { if (count($condition) == 1 && isset($condition[ActiveRecord::PRIMARY_KEY_NAME])) {
$primaryKeys = (array) $condition['primaryKey']; $primaryKeys = (array) $condition[ActiveRecord::PRIMARY_KEY_NAME];
} else { } else {
$primaryKeys = static::find()->where($condition)->column('primaryKey'); $primaryKeys = static::find()->where($condition)->column(ActiveRecord::PRIMARY_KEY_NAME);
} }
if (empty($primaryKeys)) { if (empty($primaryKeys)) {
return 0; return 0;
@ -372,10 +378,10 @@ class ActiveRecord extends \yii\db\ActiveRecord
*/ */
public static function deleteAll($condition = [], $params = []) public static function deleteAll($condition = [], $params = [])
{ {
if (count($condition) == 1 && isset($condition['primaryKey'])) { if (count($condition) == 1 && isset($condition[ActiveRecord::PRIMARY_KEY_NAME])) {
$primaryKeys = (array) $condition['primaryKey']; $primaryKeys = (array) $condition[ActiveRecord::PRIMARY_KEY_NAME];
} else { } else {
$primaryKeys = static::find()->where($condition)->column('primaryKey'); $primaryKeys = static::find()->where($condition)->column(ActiveRecord::PRIMARY_KEY_NAME);
} }
if (empty($primaryKeys)) { if (empty($primaryKeys)) {
return 0; return 0;

22
framework/yii/elasticsearch/QueryBuilder.php

@ -96,13 +96,21 @@ class QueryBuilder extends \yii\base\Object
} }
$orders = []; $orders = [];
foreach ($columns as $name => $direction) { foreach ($columns as $name => $direction) {
if (is_string($direction)) {
$column = $direction;
$direction = SORT_ASC;
} else {
$column = $name;
}
if ($column == ActiveRecord::PRIMARY_KEY_NAME) {
$column = '_id';
}
// allow elasticsearch extended syntax as described in http://www.elasticsearch.org/guide/reference/api/search/sort/ // allow elasticsearch extended syntax as described in http://www.elasticsearch.org/guide/reference/api/search/sort/
if (is_array($direction)) { if (is_array($direction)) {
$orders[] = array($name => $direction); $orders[] = [$column => $direction];
} elseif (is_string($direction)) {
$orders[] = $direction;
} else { } else {
$orders[] = array($name => ($direction === SORT_DESC ? 'desc' : 'asc')); $orders[] = [$column => ($direction === SORT_DESC ? 'desc' : 'asc')];
} }
} }
return $orders; return $orders;
@ -155,7 +163,7 @@ class QueryBuilder extends \yii\base\Object
{ {
$parts = []; $parts = [];
foreach($condition as $attribute => $value) { foreach($condition as $attribute => $value) {
if ($attribute == 'primaryKey') { if ($attribute == ActiveRecord::PRIMARY_KEY_NAME) {
if ($value == null) { // there is no null pk if ($value == null) { // there is no null pk
$parts[] = ['script' => ['script' => '0==1']]; $parts[] = ['script' => ['script' => '0==1']];
} else { } else {
@ -201,7 +209,7 @@ class QueryBuilder extends \yii\base\Object
} }
list($column, $value1, $value2) = $operands; list($column, $value1, $value2) = $operands;
if ($column == 'primaryKey') { if ($column == ActiveRecord::PRIMARY_KEY_NAME) {
throw new NotSupportedException('Between condition is not supported for primaryKey.'); throw new NotSupportedException('Between condition is not supported for primaryKey.');
} }
$filter = ['range' => [$column => ['gte' => $value1, 'lte' => $value2]]]; $filter = ['range' => [$column => ['gte' => $value1, 'lte' => $value2]]];
@ -240,7 +248,7 @@ class QueryBuilder extends \yii\base\Object
unset($values[$i]); unset($values[$i]);
} }
} }
if ($column == 'primaryKey') { if ($column == ActiveRecord::PRIMARY_KEY_NAME) {
if (empty($values) && $canBeNull) { // there is no null pk if (empty($values) && $canBeNull) { // there is no null pk
$filter = ['script' => ['script' => '0==1']]; $filter = ['script' => ['script' => '0==1']];
} else { } else {

2
tests/unit/data/ar/elasticsearch/Customer.php

@ -26,7 +26,7 @@ class Customer extends ActiveRecord
public function getOrders() public function getOrders()
{ {
return $this->hasMany(Order::className(), array('customer_id' => 'primaryKey'))->orderBy('create_time'); return $this->hasMany(Order::className(), array('customer_id' => ActiveRecord::PRIMARY_KEY_NAME))->orderBy('create_time');
} }
public static function active($query) public static function active($query)

10
tests/unit/data/ar/elasticsearch/Order.php

@ -19,17 +19,17 @@ class Order extends ActiveRecord
public function getCustomer() public function getCustomer()
{ {
return $this->hasOne(Customer::className(), ['primaryKey' => 'customer_id']); return $this->hasOne(Customer::className(), [ActiveRecord::PRIMARY_KEY_NAME => 'customer_id']);
} }
public function getOrderItems() public function getOrderItems()
{ {
return $this->hasMany(OrderItem::className(), ['order_id' => 'primaryKey']); return $this->hasMany(OrderItem::className(), ['order_id' => ActiveRecord::PRIMARY_KEY_NAME]);
} }
public function getItems() public function getItems()
{ {
return $this->hasMany(Item::className(), ['primaryKey' => 'item_id']) return $this->hasMany(Item::className(), [ActiveRecord::PRIMARY_KEY_NAME => 'item_id'])
->via('orderItems')->orderBy('name'); ->via('orderItems')->orderBy('name');
} }
@ -51,8 +51,8 @@ class Order extends ActiveRecord
// public function getBooks() // public function getBooks()
// { // {
// return $this->hasMany('Item', ['primaryKey' => 'item_id']) // return $this->hasMany('Item', [ActiveRecord::PRIMARY_KEY_NAME => 'item_id'])
// ->viaTable('tbl_order_item', ['order_id' => 'primaryKey']) // ->viaTable('tbl_order_item', ['order_id' => ActiveRecord::PRIMARY_KEY_NAME])
// ->where(['category_id' => 1]); // ->where(['category_id' => 1]);
// } // }

4
tests/unit/data/ar/elasticsearch/OrderItem.php

@ -19,11 +19,11 @@ class OrderItem extends ActiveRecord
public function getOrder() public function getOrder()
{ {
return $this->hasOne(Order::className(), ['primaryKey' => 'order_id']); return $this->hasOne(Order::className(), [ActiveRecord::PRIMARY_KEY_NAME => 'order_id']);
} }
public function getItem() public function getItem()
{ {
return $this->hasOne(Item::className(), ['primaryKey' => 'item_id']); return $this->hasOne(Item::className(), [ActiveRecord::PRIMARY_KEY_NAME => 'item_id']);
} }
} }

67
tests/unit/framework/elasticsearch/ActiveRecordTest.php

@ -44,15 +44,15 @@ class ActiveRecordTest extends ElasticSearchTestCase
$db->http()->delete('_all')->send(); $db->http()->delete('_all')->send();
$customer = new Customer(); $customer = new Customer();
$customer->primaryKey = 1; $customer->id = 1;
$customer->setAttributes(['email' => 'user1@example.com', 'name' => 'user1', 'address' => 'address1', 'status' => 1], false); $customer->setAttributes(['email' => 'user1@example.com', 'name' => 'user1', 'address' => 'address1', 'status' => 1], false);
$customer->save(false); $customer->save(false);
$customer = new Customer(); $customer = new Customer();
$customer->primaryKey = 2; $customer->id = 2;
$customer->setAttributes(['email' => 'user2@example.com', 'name' => 'user2', 'address' => 'address2', 'status' => 1], false); $customer->setAttributes(['email' => 'user2@example.com', 'name' => 'user2', 'address' => 'address2', 'status' => 1], false);
$customer->save(false); $customer->save(false);
$customer = new Customer(); $customer = new Customer();
$customer->primaryKey = 3; $customer->id = 3;
$customer->setAttributes(['email' => 'user3@example.com', 'name' => 'user3', 'address' => 'address3', 'status' => 2], false); $customer->setAttributes(['email' => 'user3@example.com', 'name' => 'user3', 'address' => 'address3', 'status' => 2], false);
$customer->save(false); $customer->save(false);
@ -60,36 +60,36 @@ class ActiveRecordTest extends ElasticSearchTestCase
// INSERT INTO tbl_category (name) VALUES ('Movies'); // INSERT INTO tbl_category (name) VALUES ('Movies');
$item = new Item(); $item = new Item();
$item->primaryKey = 1; $item->id = 1;
$item->setAttributes(['name' => 'Agile Web Application Development with Yii1.1 and PHP5', 'category_id' => 1], false); $item->setAttributes(['name' => 'Agile Web Application Development with Yii1.1 and PHP5', 'category_id' => 1], false);
$item->save(false); $item->save(false);
$item = new Item(); $item = new Item();
$item->primaryKey = 2; $item->id = 2;
$item->setAttributes(['name' => 'Yii 1.1 Application Development Cookbook', 'category_id' => 1], false); $item->setAttributes(['name' => 'Yii 1.1 Application Development Cookbook', 'category_id' => 1], false);
$item->save(false); $item->save(false);
$item = new Item(); $item = new Item();
$item->primaryKey = 3; $item->id = 3;
$item->setAttributes(['name' => 'Ice Age', 'category_id' => 2], false); $item->setAttributes(['name' => 'Ice Age', 'category_id' => 2], false);
$item->save(false); $item->save(false);
$item = new Item(); $item = new Item();
$item->primaryKey = 4; $item->id = 4;
$item->setAttributes(['name' => 'Toy Story', 'category_id' => 2], false); $item->setAttributes(['name' => 'Toy Story', 'category_id' => 2], false);
$item->save(false); $item->save(false);
$item = new Item(); $item = new Item();
$item->primaryKey = 5; $item->id = 5;
$item->setAttributes(['name' => 'Cars', 'category_id' => 2], false); $item->setAttributes(['name' => 'Cars', 'category_id' => 2], false);
$item->save(false); $item->save(false);
$order = new Order(); $order = new Order();
$order->primaryKey = 1; $order->id = 1;
$order->setAttributes(['customer_id' => 1, 'create_time' => 1325282384, 'total' => 110.0], false); $order->setAttributes(['customer_id' => 1, 'create_time' => 1325282384, 'total' => 110.0], false);
$order->save(false); $order->save(false);
$order = new Order(); $order = new Order();
$order->primaryKey = 2; $order->id = 2;
$order->setAttributes(['customer_id' => 2, 'create_time' => 1325334482, 'total' => 33.0], false); $order->setAttributes(['customer_id' => 2, 'create_time' => 1325334482, 'total' => 33.0], false);
$order->save(false); $order->save(false);
$order = new Order(); $order = new Order();
$order->primaryKey = 3; $order->id = 3;
$order->setAttributes(['customer_id' => 2, 'create_time' => 1325502201, 'total' => 40.0], false); $order->setAttributes(['customer_id' => 2, 'create_time' => 1325502201, 'total' => 40.0], false);
$order->save(false); $order->save(false);
@ -133,17 +133,17 @@ class ActiveRecordTest extends ElasticSearchTestCase
// find all asArray // find all asArray
$customers = Customer::find()->asArray()->all(); $customers = Customer::find()->asArray()->all();
$this->assertEquals(3, count($customers)); $this->assertEquals(3, count($customers));
$this->assertArrayHasKey('primaryKey', $customers[0]); $this->assertArrayHasKey(ActiveRecord::PRIMARY_KEY_NAME, $customers[0]);
$this->assertArrayHasKey('name', $customers[0]); $this->assertArrayHasKey('name', $customers[0]);
$this->assertArrayHasKey('email', $customers[0]); $this->assertArrayHasKey('email', $customers[0]);
$this->assertArrayHasKey('address', $customers[0]); $this->assertArrayHasKey('address', $customers[0]);
$this->assertArrayHasKey('status', $customers[0]); $this->assertArrayHasKey('status', $customers[0]);
$this->assertArrayHasKey('primaryKey', $customers[1]); $this->assertArrayHasKey(ActiveRecord::PRIMARY_KEY_NAME, $customers[1]);
$this->assertArrayHasKey('name', $customers[1]); $this->assertArrayHasKey('name', $customers[1]);
$this->assertArrayHasKey('email', $customers[1]); $this->assertArrayHasKey('email', $customers[1]);
$this->assertArrayHasKey('address', $customers[1]); $this->assertArrayHasKey('address', $customers[1]);
$this->assertArrayHasKey('status', $customers[1]); $this->assertArrayHasKey('status', $customers[1]);
$this->assertArrayHasKey('primaryKey', $customers[2]); $this->assertArrayHasKey(ActiveRecord::PRIMARY_KEY_NAME, $customers[2]);
$this->assertArrayHasKey('name', $customers[2]); $this->assertArrayHasKey('name', $customers[2]);
$this->assertArrayHasKey('email', $customers[2]); $this->assertArrayHasKey('email', $customers[2]);
$this->assertArrayHasKey('address', $customers[2]); $this->assertArrayHasKey('address', $customers[2]);
@ -161,16 +161,16 @@ class ActiveRecordTest extends ElasticSearchTestCase
$this->assertEquals('user3', $customerName); $this->assertEquals('user3', $customerName);
$customerName = Customer::find()->where(['status' => 2])->scalar('noname'); $customerName = Customer::find()->where(['status' => 2])->scalar('noname');
$this->assertNull($customerName); $this->assertNull($customerName);
$customerId = Customer::find()->where(['status' => 2])->scalar('primaryKey'); $customerId = Customer::find()->where(['status' => 2])->scalar(ActiveRecord::PRIMARY_KEY_NAME);
$this->assertEquals(3, $customerId); $this->assertEquals(3, $customerId);
// find by column values // find by column values
$customer = Customer::find(['name' => 'user2']); $customer = Customer::find(['name' => 'user2']);
$this->assertTrue($customer instanceof Customer); $this->assertTrue($customer instanceof Customer);
$this->assertEquals('user2', $customer->name); $this->assertEquals('user2', $customer->name);
$customer = Customer::find(['name' => 'user1', 'primaryKey' => 2]); $customer = Customer::find(['name' => 'user1', ActiveRecord::PRIMARY_KEY_NAME => 2]);
$this->assertNull($customer); $this->assertNull($customer);
$customer = Customer::find(['primaryKey' => 5]); $customer = Customer::find([ActiveRecord::PRIMARY_KEY_NAME => 5]);
$this->assertNull($customer); $this->assertNull($customer);
$customer = Customer::find(['name' => 'user5']); $customer = Customer::find(['name' => 'user5']);
$this->assertNull($customer); $this->assertNull($customer);
@ -182,7 +182,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
// find count // find count
$this->assertEquals(3, Customer::find()->count()); $this->assertEquals(3, Customer::find()->count());
$this->assertEquals(2, Customer::find()->where(['or', ['primaryKey' => 1], ['primaryKey' => 2]])->count()); $this->assertEquals(2, Customer::find()->where(['or', [ActiveRecord::PRIMARY_KEY_NAME => 1], [ActiveRecord::PRIMARY_KEY_NAME => 2]])->count());
// $this->assertEquals(6, Customer::find()->sum('id')); // $this->assertEquals(6, Customer::find()->sum('id'));
// $this->assertEquals(2, Customer::find()->average('id')); // $this->assertEquals(2, Customer::find()->average('id'));
// $this->assertEquals(1, Customer::find()->min('id')); // $this->assertEquals(1, Customer::find()->min('id'));
@ -199,7 +199,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
'name' => 'user2', 'name' => 'user2',
'address' => 'address2', 'address' => 'address2',
'status' => '1', 'status' => '1',
'primaryKey' => 2, ActiveRecord::PRIMARY_KEY_NAME => 2,
), $customer); ), $customer);
// indexBy // indexBy
@ -257,7 +257,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
$orders = $customer->getOrders()->where(['between', 'create_time', 1325334000, 1325400000])->all(); $orders = $customer->getOrders()->where(['between', 'create_time', 1325334000, 1325400000])->all();
$this->assertEquals(1, count($orders)); $this->assertEquals(1, count($orders));
$this->assertEquals(2, $orders[0]->primaryKey); $this->assertEquals(2, $orders[0]->id);
} }
public function testFindEagerViaRelation() public function testFindEagerViaRelation()
@ -266,16 +266,16 @@ class ActiveRecordTest extends ElasticSearchTestCase
$orders = Order::find()->with('items')->orderBy('create_time')->all(); $orders = Order::find()->with('items')->orderBy('create_time')->all();
$this->assertEquals(3, count($orders)); $this->assertEquals(3, count($orders));
$order = $orders[0]; $order = $orders[0];
$this->assertEquals(1, $order->primaryKey); $this->assertEquals(1, $order->id);
$this->assertEquals(2, count($order->items)); $this->assertEquals(2, count($order->items));
$this->assertEquals(1, $order->items[0]->primaryKey); $this->assertEquals(1, $order->items[0]->id);
$this->assertEquals(2, $order->items[1]->primaryKey); $this->assertEquals(2, $order->items[1]->id);
} }
public function testInsertNoPk() public function testInsertNoPk()
{ {
$this->assertEquals(['primaryKey'], Customer::primaryKey()); $this->assertEquals([ActiveRecord::PRIMARY_KEY_NAME], Customer::primaryKey());
$pkName = ActiveRecord::PRIMARY_KEY_NAME;
$customer = new Customer; $customer = new Customer;
$customer->email = 'user4@example.com'; $customer->email = 'user4@example.com';
@ -284,20 +284,25 @@ class ActiveRecordTest extends ElasticSearchTestCase
$this->assertNull($customer->primaryKey); $this->assertNull($customer->primaryKey);
$this->assertNull($customer->oldPrimaryKey); $this->assertNull($customer->oldPrimaryKey);
$this->assertNull($customer->$pkName);
$this->assertTrue($customer->isNewRecord); $this->assertTrue($customer->isNewRecord);
$customer->save(); $customer->save();
$this->assertNotNull($customer->primaryKey); $this->assertNotNull($customer->primaryKey);
$this->assertNotNull($customer->oldPrimaryKey); $this->assertNotNull($customer->oldPrimaryKey);
$this->assertNotNull($customer->$pkName);
$this->assertEquals($customer->primaryKey, $customer->oldPrimaryKey); $this->assertEquals($customer->primaryKey, $customer->oldPrimaryKey);
$this->assertEquals($customer->primaryKey, $customer->$pkName);
$this->assertFalse($customer->isNewRecord); $this->assertFalse($customer->isNewRecord);
} }
public function testInsertPk() public function testInsertPk()
{ {
$pkName = ActiveRecord::PRIMARY_KEY_NAME;
$customer = new Customer; $customer = new Customer;
$customer->primaryKey = 5; $customer->$pkName = 5;
$customer->email = 'user5@example.com'; $customer->email = 'user5@example.com';
$customer->name = 'user5'; $customer->name = 'user5';
$customer->address = 'address5'; $customer->address = 'address5';
@ -307,17 +312,23 @@ class ActiveRecordTest extends ElasticSearchTestCase
$customer->save(); $customer->save();
$this->assertEquals(5, $customer->primaryKey); $this->assertEquals(5, $customer->primaryKey);
$this->assertEquals(5, $customer->oldPrimaryKey);
$this->assertEquals(5, $customer->$pkName);
$this->assertFalse($customer->isNewRecord); $this->assertFalse($customer->isNewRecord);
} }
public function testUpdatePk() public function testUpdatePk()
{ {
$pk = ['primaryKey' => 2]; $pkName = ActiveRecord::PRIMARY_KEY_NAME;
$pk = [$pkName => 2];
$orderItem = Order::find($pk); $orderItem = Order::find($pk);
$this->assertEquals(2, $orderItem->primaryKey); $this->assertEquals(2, $orderItem->primaryKey);
$this->assertEquals(2, $orderItem->oldPrimaryKey);
$this->assertEquals(2, $orderItem->$pkName);
$this->setExpectedException('yii\base\InvalidCallException'); $this->setExpectedException('yii\base\InvalidCallException');
$orderItem->primaryKey = 13; $orderItem->$pkName = 13;
$orderItem->save(); $orderItem->save();
} }
} }
Loading…
Cancel
Save