Laravel 4之Eloquent ORM

定义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();

结束

[转]Laravel 4之Eloquent ORM的更多相关文章

  1. Laravel 数据库操作 Eloquent ORM

    laravel 操作数据库一般都使用它的Eloquent ORM才操作 建立模型 <?php namespace App; use Illuminate\Database\Eloquent\Mo ...

  2. Laravel数据库操作 Eloquent ORM

    模型首先在App目录下建立student的文件夹 里面放上 Student.php 且需要继承基类Model //允许批量赋值的字段// protected $fillable = ['name',' ...

  3. Laravel Eloquent ORM

    Eloquent ORM 简介 基本用法 集体赋值 插入.更新.删除 软删除 时间戳 查询范围 关系 查询关系 预先加载 插入相关模型 触发父模型时间戳 与数据透视表工作 集合 访问器和调整器 日期调 ...

  4. [Laravel] 03 - DB facade, Query builder & Eloquent ORM

    连接数据库 一.Outline 三种操作数据库的方式. 二.Facade(外观)模式 Ref: 解读Laravel,看PHP如何实现Facade? Facade本质上是一个“把工作推给别人做的”的类. ...

  5. laravel 5.1 使用Eloquent ORM 操作实例

    Laravel 的 Eloquent ORM 提供了更优雅的ActiveRecord 实现来和数据库的互动. 每个数据库表对应一个模型文件. 数据库配置 .env文件(也可以直接修改config/da ...

  6. laravel通过Eloquent ORM实现CURD

    //Eloquent ORM public function orm1() { //all(); 返回所有数据: /*$students=Student::all(); dd($students);* ...

  7. laravel Eloquent ORM联合查询出现Class not found,就算在Moel中存在这个类

    今天发现一个坑,在处理Eloquent ORM的联合查询时,一直报错Class 'AdminGroup' not found ,可是我的项目中明明存在这个类,如下 这是我的模型类: 它们的控制器方法: ...

  8. laravel框架总结(八) -- ORM模型

    ORM模型简介 1>什么是ORM? ORM,即 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在操作具体的 ...

  9. Eloquent ORM笔记

    基本操作 新增 $user = new User; $user->name = 'John'; $user->save(); $insertedId = $user->id;//从对 ...

随机推荐

  1. maven 打包源文件

    1.The source plugin can be used to create a jar file of the project sources from the command line or ...

  2. JavaScript 公有 私有 静态属性和方法

    1.公有属性和公有方法 这里的 name  age  都是参数传递进去 可以在外面直接实例化调用. 2.私有属性和方法 私有的只能在函数内部使用 作用域的原因 3.静态属性和静态方法 这里我首先 创建 ...

  3. mysql常用操作(转自阿铭linux)

    在前面两个章节中已经介绍过MySQL的安装了,但是光会安装还不够,您还需要会一些基本的相关操作.当然了,关于MySQL的内容也是非常多的,只不过对于linux系统管理员来讲,一些基本的操作已经可以应付 ...

  4. Java数据库缓存思路

    为什么要用缓存?如果问这个问题说明你还是新手,数据库吞吐量毕竟有限,每秒读写5000次了不起了,如果不用缓存,假设一个页面有100个数据库操作,50个用户并发数据库就歇菜,这样最多能支撑的pv也就50 ...

  5. silverlight visifire控件图表制作——silverlight 后台方法画图

    1.调用wcf 获取信息 private void svc_GetSingleChartDataCompleted(object sender, GetSingleChartDataCompleted ...

  6. silverlight 双坐标轴

    public void CreateLine(Grid oGrid, string sTitle, string sTableName, bool ifGetSig, string sYUint, s ...

  7. iOS的属性声明:retain和strong的区别

    声明属性时用strong或者retain效果是一样的(貌似更多开发者更倾向于用strong).不过在声明Block时,使用strong和retain会有截然不同的效果.strong会等于copy,而r ...

  8. Java中的try/catch/finally

    样例1: public class Test{ public static String output = ""; public static void foo(int i){ t ...

  9. Python学习笔记整理(四)Python中的字符串..

    字符串是一个有序的字符集合,用于存储和表现基于文本的信息. 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3=""&quo ...

  10. linux tar使用

    Linux  tar指令简单使用 -c:创建包,-x:解压或解包(-c和-x可理解为互逆运算),-t:查看包 -f:后加处理文件,必须放在参数组合的最后一位(tar  -cf  a.tar  1.tx ...