ORM
Laravel3中MVC体系中Model里最重要的组成部分无疑是ORM了,ORM — object-relational mapper — 将数据操作面向对象化,使得整个web框架的核心风格统一,降低整体复杂度,为开发者提供便利。
Laravel3中的ORM叫做Eloquent,是一个非常轻量化的ORM层,但是轻量并不简陋,基本上涵盖了在web开发中可能遇到的各种数据操作情景。
首先,我们要建立基于Eloquent的Model类,非常简单,只需要在application/models目录下建立以类名小写为文件名的php文件,比如我们要建立User类,那么我们建立application/models/user.php文件,其中内容为:
// 需要继承 Eloquent 类 class User extends Eloquent {}
这样我们就建立了基于Eloquent的User Model类,再无多余配置,在此,我们需要清楚的是Laravel3提供这样简便配置方式的前提假设,假设有二:
一、 数据库中存在以类名复数形式为名的表,以上为例就是数据库中存在users表。
二、 此表中,包含一个名为id的主键字段。
当然,你也可以不按约定而自己指定表:
class User extends Eloquent { // 指定User类对应的表为my_users public static $table = ‘my_users‘; }
获取数据
根据主键id获取数据对象:
// 或缺id为1的User信息 $user = User::find(1);
然后我们就可以操作数据对象,获取对象的属性:
// 打印出此user对象的email属性 echo $user->email;
获取类的全部对象:
$users = User::all(); // 循环处理 foreach ($users as $user) { echo $user->email; }
根据各种条件获取数据对象,条件的编写方式与Fluent一样,具体可以参照Fluent去实现:
// 获取email字段为$email的第一个记录 $user = User::where(‘email‘, ‘=‘, $email)->first(); // 同上(利用反射的方式将字段名写到方法名中) $user = User::where_email($email)->first(); // 获取id在1、2、3之中或者email字段为$email的所有数据 $users = User::where_in(‘id‘, array(1, 2, 3))->or_where(‘email‘, ‘=‘, $email)->get(); // 按votes字段倒排序的前10条数据 $users = User::order_by(‘votes‘, ‘desc‘)->take(10)->get();
可以调用SQL中各种统计类的函数:
// 最小值 $min = User::min(‘id‘); // 最大值 $max = User::max(‘id‘); // 平均值 $avg = User::avg(‘id‘); // 总和 $sum = User::sum(‘id‘); // 计数 $count = User::count();
当然,这些方法可以和条件语句复合使用。
$count = User::where(‘id‘, ‘>‘, 10)->count();
新建数据
利用Eloquent新建数据非常简单,先实例化Model类,然后给属性赋值,最后执行save()方法:
$user = new User; $user->email = ‘example@gmail.com‘; $user->password = ‘secret‘; // 写入数据 $user->save();
如果觉得过程式的方式比较繁琐,还可以利用create方法直接创建数据:
$user = User::create(array(‘email‘ => ‘example@gmail.com‘));
更新数据
更新数据也很简单,首先获取数据对象,然后操作数据属性,最后执行save()方法保存:
// 获取数据对象 $user = User::find(1); $user->email = ‘new_email@gmail.com‘; $user->password = ‘new_secret‘; // 保存数据 $user->save();
删除数据
首先获取数据对象,然后执行delete()方法:
// 获取数据对象 $user = User::find(1); $user->delete();