
Laravel的Eloquent ORM 提供了漂亮、简洁的 ActiveRecord 来实现和数据库的互动。 每个数据库表会和一个对应的「模型」互动。
01、数据库的基本操作
数据库的配置放在了config/database.php里:
'mysql' => [
'read' => [
'host' => '192.168.1.1',
],
'write' => [
'host' => '196.168.1.2'
],
'driver' => 'mysql',
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
],
数据库事务处理应该是最关心的事情了
DB::transaction(function()
{
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
在 transaction 闭包中若抛出任何异常会导致事务自动回滚。
有时候你可能需要自己开始一个事务:
DB::beginTransaction();
你可以通过rollback的方法回滚事务:
DB::rollback();
最后,你可以通过 commit 的方法提交事务:
DB::commit();
有时候你可能需要重新连接到特定的数据库:
DB::reconnect('foo');
02、查找日志记录
Laravel 可以在内存里访问这次请求中所有的查找语句。然而在有些例子下要注意,比如一次添加 大量的数据,可能会导致应用程序耗损过多内存。
如果要启用日志,可以使用 enableQueryLog 方法:
DB::connection()->enableQueryLog();
03、模型操作
我们先从建立一个Eloquent 模型开始。模型通常放在app目录下,所有的Eloquent 模型都继承于 Illuminate/Database/Eloquent/Model
定义一个 Eloquent 模型
class User extends Model {}
你也可以通过之前说过的命令方式去生成:
php artisan make:model User
注意我们并没有定义模型会使用哪个数据库表。若没有特别指定,系统就会默认自动对应名称为类名称的小写复数形态的数据库表。所以,在上面的例子中, Eloquent 会假设 User 模型将把数据存在 users 数据库表。你也可以在类中定义 table 属性自定义要对应的数据库表。
class User extends Model {
protected $table = 'my_users';
}
一些基本的操作:
//查询
$users = User::all(); //取出所有记录
$user = User::find(1); //根据主键取出一条数据
$users = User::where('votes', '>', 100)->take(10)->get(); //where查询
//插入
$user = new User;
$user->name = 'John';
$user->save();
//更新
$user = User::find(1);
$user->email = 'john@foo.com';
$user->save();
//删除
$user = User::find(1);
$user->delete();
还有一个我比较喜欢的orm操作 。
例如:如果我需要根据条件查询某些数据,但是这个条件是不一定存在的,你可能会这样写代码:
if(empty($condition)){
//通过$condition执行sql语句
select * from where $condition= ....
}
在orm操作中提供了那么一种连贯操作
$this->when($condition,function($query) use ($condition){ $query->where($condition)->find();
})->
上面的sql的意思是如果$condition不为空的话就执行后面的子句。这样的连贯操作非常简洁。
04、将模型数据转成数组
当构建 JSON API 时,您可能常常需要把模型和关联对象转换成数组或JSON。所以Eloquent里已经包含了这些方法。要把模型和已载入的关联对象转成数组,可以使用 toArray 方法:
return User::all()->toArray();
return User::find(1)->toJson();
有时你可能想要限制能出现在数组或 JSON 格式的属性数据,比如密码字段。只要在模型里增加 hidden 属性即可。
class User extends Model {
protected $hidden = ['password'];
}
此外,可以使用 visible 属性定义白名单:
protected $visible = ['first_name', 'last_name'];

还有下期值得期待哦
为速度而生的Laravel框架Lumen(四)-系统服务

更多精彩:





