云服务器

为速度而生的Laravel框架---Lumen(二)-数据库基础和ORM操作

2017-12-25 15:27:39 0

Laravel 的 Eloquent ORM 提供了漂亮、简洁的 ActiveRecord 实现来和数据库的互动。 每个数据库表会和一个对应的「模型」互动。

数据库基本操作

数据库的配置放在了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'); ```

查找日志记录

Laravel 可以在内存里访问这次请求中所有的查找语句。然而在有些例子下要注意,比如一次添加 大量的数据,可能会导致应用程序耗损过多内存。 如果要启用日志,可以使用 enableQueryLog 方法:

DB::connection()->enableQueryLog();

模型操作

我们先从建立一个 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不为空的话就执行后面的子句。这样的连贯操作非常简洁。

将模型数据转成数组

当构建 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 = ['firstname', 'lastname']; ```

 

上一篇: 无

微信关注

获取更多技术咨询