Browse Source

Made ActiveRecord::isPrimaryKey() public

+ added tests and fixed behavior
tags/2.0.0-beta
Carsten Brandt 11 years ago
parent
commit
77840adf65
  1. 11
      framework/yii/db/ActiveRecord.php
  2. 17
      tests/unit/framework/db/ActiveRecordTest.php

11
framework/yii/db/ActiveRecord.php

@ -1485,18 +1485,19 @@ class ActiveRecord extends Model
}
/**
* @param array $keys
* @return boolean
* Returns a value indicating whether the given set of attributes represents the primary key for this model
* @param array $keys the set of attributes to check
* @return boolean whether the given set of attributes represents the primary key for this model
*/
private function isPrimaryKey($keys)
public static function isPrimaryKey($keys)
{
$pks = $this->primaryKey();
$pks = static::primaryKey();
foreach ($keys as $key) {
if (!in_array($key, $pks, true)) {
return false;
}
}
return true;
return count($keys) === count($pks);
}
/**

17
tests/unit/framework/db/ActiveRecordTest.php

@ -489,4 +489,21 @@ class ActiveRecordTest extends DatabaseTestCase
$customers = Customer::find()->where(['status' => false])->all();
$this->assertEquals(1, count($customers));
}
public function testIsPrimaryKey()
{
$this->assertFalse(Customer::isPrimaryKey([]));
$this->assertTrue(Customer::isPrimaryKey(['id']));
$this->assertFalse(Customer::isPrimaryKey(['id', 'name']));
$this->assertFalse(Customer::isPrimaryKey(['name']));
$this->assertFalse(Customer::isPrimaryKey(['name', 'email']));
$this->assertFalse(OrderItem::isPrimaryKey([]));
$this->assertFalse(OrderItem::isPrimaryKey(['order_id']));
$this->assertFalse(OrderItem::isPrimaryKey(['item_id']));
$this->assertFalse(OrderItem::isPrimaryKey(['quantity']));
$this->assertFalse(OrderItem::isPrimaryKey(['quantity', 'subtotal']));
$this->assertTrue(OrderItem::isPrimaryKey(['order_id', 'item_id']));
$this->assertFalse(OrderItem::isPrimaryKey(['order_id', 'item_id', 'quantity']));
}
}

Loading…
Cancel
Save