-------------------- dbHelper.php --------------------
class dbHelper
{
public static function createUID($len = 16)
{
$index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
$tc = strlen($index) - 1;
$pk = '';
for ($i = 0; $i < $len; $i++)
{
$pk .= $index[rand(0, $tc)];
}
return $pk;
}
public static function arCreateUID($obj, $len = 16)
{
$pk = $obj->get_primary_key(true);
while (empty($obj->$pk) || $obj->$pk === 'NULL')
{
$obj->$pk = self::createUID($len);
try
{
$r = $obj->find('first', array(
'conditions' => array($pk . '=?', $obj->$pk)
));
if (is_null($r))
{
break;
}
} catch (\ActiveRecord\RecordNotFound $e) {
break;
}
}
}
}
-------------------- MyTable.php --------------------
class MyTable extends \ActiveRecord\Model
{
static $before_create = array('create_uid');
public function create_uid()
{
dbHelper::arCreateUID($this);
}
}
Diff to Previous Revision
--- revision 3 2011-02-11 00:58:33
+++ revision 4 2011-02-24 21:43:55
@@ -26,9 +26,14 @@
try
{
- $obj->find('first', array(
+ $r = $obj->find('first', array(
'conditions' => array($pk . '=?', $obj->$pk)
));
+
+ if (is_null($r))
+ {
+ break;
+ }
} catch (\ActiveRecord\RecordNotFound $e) {
break;
}