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 * Returns a value indicating whether the given set of attributes represents the primary key for this model
* @return boolean * @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) { foreach ($keys as $key) {
if (!in_array($key, $pks, true)) { if (!in_array($key, $pks, true)) {
return false; 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(); $customers = Customer::find()->where(['status' => false])->all();
$this->assertEquals(1, count($customers)); $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