暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

睿江云计算 2018-05-28
729


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($queryuse ($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(四)-系统服务 


更多精彩:



文章转载自睿江云计算,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论