{ $field = preg_replace('/^findBy(\\w*)$/', '${1}', $method); $query = "SELECT * FROM" . static::$table . "where {$field}='{$args['0']}'"; return self::createDomain($query); } private static function createDomain($query) { $klass = get_called_class(); $domain = new $klass(); $domain->fieldvalues = array(); $domain->select = $query; foreach ($klass::$fields as $field => $type) { $domain->fieldvalues[$field] = 'TODO:set from sql result'; } return $domain; } } class Customer extends ActiveRecord { protected static $table = 'custdb'; protected static $fields = array('id' => 'int', 'email' => 'varchar', 'lastname' => 'varchar'); } class Sales extends ActiveRecord { protected static $table = 'salesdb'; protected static $fields = array('id' => 'int', 'item' => 'varchar', 'qty' => 'int'); } assert("SELECT * FROM custdb where id=123" == Customer::findById(123)->select); assert("TODO:set from sql result" == Customer::findById(123)->email); assert("SELECT * FROM salesdb where id=321" == Sales::findById(321)->select); assert("SELECT * FROM custdb where Lastname='Denoncourt'" == Customer::findByLastname('Denoncourt')->select);
{ $field = preg_replace('/^findBy(\\w*)$/', '${1}', $method); $query = "select * from " . static::$table . " where {$field} = '{$args['0']}'"; return self::createDomain($query); } private static function createDomain($query) { $klass = get_called_class(); $domain = new $klass(); $domain->fieldvalue = array(); $domain->select = $query; foreach ($klass::fields as $field => $type) { $domain->fieldvalue[$field] = 'TODO: set from sql result'; } return $domain; } } class Customer extends ActiveRecord { protected static $table = 'custdb'; protected static $fields = array('id' => 'int', 'email' => 'varchar', 'lastname' => 'varchar'); } class Sales extends ActiveRecord { protected static $table = 'salesdb'; protected static $fields = array('id' => 'int', 'item' => 'varchar', 'qty' => 'int'); } Customer::findById(123)->select; Customer::findById(123)->email; Sales::findById(123)->select; Sales::findByItem('item')->select;
$field = preg_replace('/^findBy(\\w*)$/', '${1}', $method); $query = "select * from" . static::$table . "where {$field} = '{$args['0']}'"; return self::createDomain($query); } private static function createDomain($query) { //get_called_class() 获取当前调用的类 $klass = get_called_class(); $domain = new $klass(); $domain->fieldvalues = array(); $domain->select = $query; foreach ($klass::$fields as $field => $type) { $domain->fieldvalues[$field] = 'TODO::set from sql result'; } return $domain; } } class Customer extends ActiveRecord { protected static $table = 'custdb'; protected static $fields = array('id' => 'int', 'email' => 'varchar', 'lastname' => 'varchar'); } class Sales extends ActiveRecord { protected static $table = 'saledb'; protected static $fields = array('id' => 'int', 'item' => 'varchar', 'qty' => 'int'); } assert("select * from custdb where id = 123" == Customer::findById(123)->select); assert("TODO::set from sql result" == Customer::findById(123)->email); assert("select * from saledb where id = 321" == Sales::findById(321)->select); assert("select * from custdb where Lastname='Denoncourt'" == Customer::findByLastname('Denoncourt')->select);