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. Android播放音频的两种方式

    一种使用MediaPlayer,使用这种方式通常是播放比较长的音频,如游戏中的背景音乐. 代码如下: private MediaPlayer mPlayer = null; mPlayer = Med ...

  2. rsync+sersync实现数据文件实时同步

    一.简介 sersync是基于Inotify开发的,类似于Inotify-tools的工具: sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字: ...

  3. python-登录-注册-修改密码

    该脚本实现了,登录,注册,修改密码功能. #!/usr/bin/env python # -*- coding:utf-8 -*- #pangguoping import os def login(u ...

  4. java基础知识3

    58.线程的基本概念.线程的基本状态以及状态之间的关系线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身.Java中的线程有四种状态分别是:运行.就绪.挂 ...

  5. c++11-bind的用法

    bind函数 在c++11之前,要绑定某个函数.函数对象或者成员函数的不同参数值需要用到不同的转换器,如bind1st.bind2nd.fun_ptr.mem_fun和mem_fun_ref等.在c+ ...

  6. 异常处理:你不可能总是对的 - 零基础入门学习Python032

    异常处理:你不可能总是对的 让编程改变世界 Change the world by program 因为我们是人,不是神,所以我们经常会犯错.当然程序员也不例外,就算是经验丰富的码农,也不能保证写出来 ...

  7. sublime 插件 和free 注册码

    代码对齐: Alignment html代码补全:  Emmet CoffeeScript语法:  Better CoffeeScript css格式化:  CSS Format less语法:  L ...

  8. python 反向查找

    python 字符串反向查找大部分在正向查找前面加入r eg: str.rfind('str') str.rsplit(',')

  9. Windows 8.1 正式版镜像下载大全

    该系统已有更新的版本,请转至<Windows 8.1 with update 官方最新镜像汇总>下载. [声明:所有资源均来自于网络,请购买正版授权后再使用.]Win8.1 正式版原版镜像 ...

  10. 转:修改类不重启tomcat 自动加载项目

    可以修改类不用重启Tomcat加载整个项目(手工启动)     配置reloadable=true(自动重载)     使用Debug模式,前提是仅限于局部修改.(修改类不用重启--热加载) (rel ...