首页 > 代码库 > laravel3学习笔记(六)
laravel3学习笔记(六)
原作者博客:ieqi.net
====================================================================================================
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();