Laravel 4之Eloquent ORM
http://dingjiannan.com/2013/laravel-eloquent/

定义Eloquent模型

模型通常放在app/models目录中,但是您可以自由地把它们放在任何地方,只要它能根据您的composer.json文件自动加载。除非显示地指定表名,Eloquent默认情况下将模型类名的小写,复数形式作为表名。如我们定义的模型为Game,那么它将操作games数据表。

  1. <?php
  2. // app/models/Game.php
  3. classGameextendsEloquent
  4. {
  5. //
  6. }

然后就可以使用该模型

  1. Route::get('/',function()
  2. {
  3. $game =newGame;
  4. $game->name ='Assassins Creed';
  5. $game->description ='Assassins VS templars.';
  6. $game->save();
  7. });

这是会提示错误,因为模型默认每个表创建时都有$table->timestamps();,所以你需要为表添加这两个字段或是在模型中关闭

  1. public $timestamps =false;

你可以为模型指定数据表

  1. public $table ='gamezilla_roar';

Eloquent 将假设每张表有一个名为 id 的主键。您可以定义 primaryKey 属性来覆盖这个约定。同样,您可以定义一个 connection 属性来覆盖在使用这个模型时所用的数据库连接。

读取模型数据

获取所有所有记录

  1. $games =Game::all();

根据主键获取一条记录

  1. $games =Game::fine(1);

[查询构建器] 中适用的函数在 Eloquent 模型的查询中同样适用。具体参考官方API手册

根据主键获取一条记录或者抛出一个异常

  1. $model =User::findOrFail(1);
  2. $model =User::where('votes','>',100)->firstOrFail();

注册错误处理器,请监听 ModelNotFoundException

  1. useIlluminate\Database\Eloquent\ModelNotFoundException;
  2. App::error(function(ModelNotFoundException $e)
  3. {
  4. returnResponse::make('Not Found',404);
  5. });

指定查询的数据库连接

  1. $user =User::on('connection-name')->find(1);

插入

  1. $user =newUser;
  2. $user->name ='John';
  3. $user->save();

通常您的 Eloquent 模型将有自动递增的键。然而,如果您希望指定您自定义的键,在模型中设置 incrementing 属性为 false。

您也可以使用 create 函数在一行代码中保存一个新的模型。被插入的模型实例将从函数中返回。但是,在您这样做之前,您需要在模型中指定 fillable 或者 guarded 属性,因为所有 Eloquent 模型默认阻止集体赋值。

  1. $user =User::create(array('name'=>'John'));

更新

  1. $user =User::find(1);
  2. $user->email ='john@foo.com';
  3. $user->save();

有时您可能希望不仅保存模型,还有它的所有关系。为此,您可以使用 push 函数:

  1. $user->push();

在一组模型上运行更新:

  1. $affectedRows =User::where('votes','>',100)->update(array('status'=>2));

删除

  1. $user =User::find(1);
  2. $user->delete();

根据主键删除一个模型

  1. User::destroy(1);
  2. User::destroy(1,2,3);

一组模型中运行删除查询

  1. $affectedRows =User::where('votes','>',100)->delete();

如果您希望简单的在一个模型中更新时间戳,可以使用 touch 函数

  1. $user->touch();

软删除

并没有真的从数据库中删除。相反,一个 deleted_at 时间戳在记录中被设置。为一个模型开启软删除,在模型中指定 softDelete 属性

  1. classUserextendsEloquent{
  2. protected $softDelete =true;
  3. }

在您的表中添加一个 deleted_at 字段,您可以在迁移中使用 softDeletes 函数:

  1. $table->softDeletes();

当您在一个模型中调用 delete 函数,deleted_at字段将被设置为当前的时间戳。在使用软删除的模型中查询,被软删除的模型将不被包含进查询结果中。为了强制已删除的模型出现在结果集中,在查询中使用 withTrashed 函数:

  1. $users =User::withTrashed()->where('account_id',1)->get();

希望在结果集中只包含软删除的模型,您可以使用 onlyTrashed 函数

  1. $users =User::onlyTrashed()->where('account_id',1)->get();

恢复一个已被软删除的记录,使用 restore 函数:

  1. $user->restore();

在查询中使用 restore 函数:

  1. User::withTrashed()->where('account_id',1)->restore();

restore 函数也可以在关系中被使用:

  1. $user->posts()->restore();

从数据库中真正删除一个模型,您可以使用 forceDelete 函数:

  1. $user->forceDelete();

检测一个给定的模型实例是否被软删除,可以使用 trashed 函数:

  1. if($user->trashed())
  2. {
  3. //
  4. }

查询范围

范围允许您容易在模型中重用查询逻辑。定义一个范围,简单的用 scope 为模型添加前缀

  1. classUserextendsEloquent{
  2. publicfunction scopePopular($query)
  3. {
  4. return $query->where('votes','>',100);
  5. }
  6. }

使用一个查询范围

  1. $users =User::popular()->orderBy('created_at')->get();

使用参数

  1. classUserextendsEloquent{
  2. publicfunction scopeOfType($query, $type)
  3. {
  4. return $query->whereType($type);
  5. }
  6. }

然后在范围函数调用中传递参数:

  1. $users =User::ofType('member')->get();

结束

点击查看评论

转载于:https://www.cnblogs.com/fx2008/p/3560752.html

[转]Laravel 4之Eloquent ORM相关推荐

  1. Laravel Lumen之Eloquent ORM使用速查-基础部分

    使用Eloquent ['eləkwənt] 时,数据库查询构造器的方法对模型类也是也用的,使用上只是省略了DB::table('表名')部分. 在模型中使用protected成员变量$table指定 ...

  2. 解决laravel框架中Eloquent ORM的save方法无法插入数据的问题

    学习laravel中: 今天在测试使用Eloquent ORM将数据使用 save()方法插入到mysql中时,出现了错误,如图所示: 在网上查阅资料后找到了原因: 使用save方法新增数据: lar ...

  3. 1+X web中级 Laravel学习笔记——Eloquent ORM查询、更新、删除、新增

    Eloquent ORM简介 larave1所自带的Eloquent oRM是一个非常优美简洁的ActiveRecord实现,用来实现数据库的操作他的每个数据的表都有对应的模型(model)用于数据表 ...

  4. 【整理】Laravel中Eloquent ORM 关联关系的操作

    Laravel中Eloquent ORM 关联关系的操作 关联数据 定义关联关系 一对一 <?php class User extends Model{// 获取关联到用户的手机public f ...

  5. laravel组件单独加载(2):模型 Eloquent ORM

    模型组件的加入 目前的项目代码是基于上一个文章的,不知道的可以看上一个文章laravel组件单独加载(1):路由 修改composer.json文件加入模型组件 {"require" ...

  6. Laravel 5.1 文档攻略——Laravel Eloquent ORM最强大也是最难理解的部分:数据关系...

    简介 其实大家都知道,数据表之间都是可以关联的,Eloquent ORM是数据模型操作代替表操作,那么表的关联查询,在Eloquent这里也就是模型间的关联查询,这就是本章的主要内容: Eloquen ...

  7. 在Laravel外使用Eloquent(一)

    不得不承认Laravel的Eloquent是一个很棒的ORM,其实Laravel框架的设计本身结构使用的是subtree实现(外层使用的git-subsplit) , 也就是说Eloquent是独立的 ...

  8. php orm 内存泄漏,Lavarel Eloquent ORM常驻进程下的内存溢出问题

    Laravel 的 Eloquent ORM 提供了漂亮.简洁的 ActiveRecord 实现来和数据库交互.每个数据库表都有一个对应的「模型」用来与该表交互.你可以通过模型查询数据表中的数据,并将 ...

  9. 使用Laravel Eloquent ORM 时如何查询表中指定的字段

    我们在使用Laravel ORM的Model方法find, get, first方法获取数据对象时返回的数据对象的attributes属性数组里会包含数据表中所有的字段对应的键值关系, 那么如何在OR ...

最新文章

  1. Ubuntu输入正确的用户名密码不能进入系统的原因和解决方法
  2. libuv 中文编程指南(零)前言
  3. Index of sql server
  4. 正确理解ContentPresenter
  5. 前端学习(771):小结
  6. html框架有什么作用,使用HTML5+CSS+JS框架有那些好处
  7. Linux 零拷贝方案
  8. SVN学习2020.8.9
  9. UnityShader19:渲染纹理(上)之截屏功能实现
  10. OJ:一道考察多态的题目
  11. 深度学习模型---稀疏编码 Sparse Coding
  12. 在Windows中如何通过命令行创建快捷方式
  13. 哈佛为什么群星闪耀?
  14. tortoise介绍
  15. Go语言(golang)的错误(error)处理的推荐方案
  16. Hulu校招补录已开始,1年内工作经验也可投!
  17. 如何修改github博客主题
  18. [原创]SP的前途??(猛回头,警世钟)[转贴]
  19. Linux服务器互信
  20. 推薦 CSDN 最讓人佩服的專家,袁萌。

热门文章

  1. func_get_args()获取一个函数的所有参数
  2. 光大代付支付有问题解决思路
  3. 去掉Mybatis Generator生成的一堆 example
  4. LinuxControlGroup(Cgroup)简介
  5. 解决方案:SpringBoot分布式项目跨域
  6. python的本地包下载地址
  7. Photo Sphere Viewer 全景图
  8. Andrew Ng Machine Learning 专题【Logistic Regression amp; Regularization】
  9. [leetcode-347-Top K Frequent Elements]
  10. jquery --- Poshy Tip jQuery Plugin