简单的示例

这是一个 单模型的 ORM 使用范例, 没有实用关系, 但是用了字段的验证.

数据表结构

  1. CREATE TABLE IF NOT EXISTS `members` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3. `username` varchar(32) NOT NULL,
  4. `first_name` varchar(32) NOT NULL,
  5. `last_name` varchar(32) NOT NULL,
  6. `email` varchar(127) DEFAULT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

模型

  1. <?php defined('SYSPATH') or die('No direct access allowed.');
  2. class Model_Member extends ORM {
  3. public function rules()
  4. {
  5. return array(
  6. 'username' => array(
  7. array('not_empty'),
  8. array('min_length', array(':value', 4)),
  9. array('max_length', array(':value', 32)),
  10. array('regex', array(':value', '/^[-\pL\pN_.]++$/uD')),
  11. ),
  12. 'first_name' => array(
  13. array('not_empty'),
  14. array('min_length', array(':value', 4)),
  15. array('max_length', array(':value', 32)),
  16. array('regex', array(':value', '/^[-\pL\pN_.]++$/uD')),
  17. ),
  18. 'last_name' => array(
  19. array('not_empty'),
  20. array('min_length', array(':value', 4)),
  21. array('max_length', array(':value', 32)),
  22. array('regex', array(':value', '/^[-\pL\pN_.]++$/uD')),
  23. ),
  24. 'email' => array(
  25. array('not_empty'),
  26. array('min_length', array(':value', 4)),
  27. array('max_length', array(':value', 127)),
  28. array('email'),
  29. ),
  30. );
  31. }
  32. }

[!!] 当你使用 ORM::save() 时, 将触发 ORM::rules()ORM::rules() 将一个数组结果 传递到一个 [Validation] 对象来对字段进行验证 .

[!!] 请注意 在模型中定义主键 id 并不是必须的。 并且 数据库中的表名 是 复数 和 模型的名称 是 奇异

控制器

  1. <?php defined('SYSPATH') or die('No direct access allowed.');
  2. class Controller_Member extends Controller_Template {
  3. public function action_index()
  4. {
  5. /**
  6. * 范例一
  7. */
  8. // 创建一个 `member` 的模型接口
  9. $members = ORM::factory('member');
  10. // 获得所有 `first name` 是 "Peter" 的结果
  11. // find_all() 意思就是找到所有符合条件的结果。
  12. $members->where('first_name', '=', 'Peter')->find_all();
  13. // 获得 $members 对象中的 记录数量
  14. $members->count_all();
  15. /**
  16. * 范例二
  17. */
  18. // 创建一个 `member` 的模型接口
  19. $member = ORM::factory('member');
  20. // 获得一个 `user name` 是 "bongo" 的 成员记录 find() 的意思是
  21. // 我们只获得第一个匹配的记录.
  22. $member->where('username', '=', 'bongo')->find();
  23. /**
  24. * 范例三
  25. */
  26. // 创建一个 `member` 的模型接口
  27. $member = ORM::factory('member');
  28. // 执行 一个 `INSERT` 查询
  29. $member->username = 'bongo';
  30. $member->first_name = 'Peter';
  31. $member->last_name = 'Smith';
  32. $member->save();
  33. /**
  34. * 范例四
  35. */
  36. // 创建一个 `member`表中的 "id" 列的值 等于 1 的模型接口
  37. $member = ORM::factory('member', 1);
  38. // 执行 更新 操作
  39. $member->username = 'bongo';
  40. $member->first_name = 'Peter';
  41. $member->last_name = 'Smith';
  42. $member->save();
  43. }
  44. }

[!!] 如果要访问 模型的列值 ,可以想访问 PHP 对象一样使用 $member->first_name 。