[转]Laravel 4之Eloquent ORM
定义Eloquent模型
模型通常放在app/models目录中,但是您可以自由地把它们放在任何地方,只要它能根据您的composer.json文件自动加载。除非显示地指定表名,Eloquent默认情况下将模型类名的小写,复数形式作为表名。如我们定义的模型为Game,那么它将操作games数据表。
<?php// app/models/Game.phpclassGameextendsEloquent{//}
然后就可以使用该模型
Route::get('/',function(){$game =newGame;$game->name ='Assassins Creed';$game->description ='Assassins VS templars.';$game->save();});
这是会提示错误,因为模型默认每个表创建时都有$table->timestamps();,所以你需要为表添加这两个字段或是在模型中关闭
public $timestamps =false;
你可以为模型指定数据表
public $table ='gamezilla_roar';
Eloquent 将假设每张表有一个名为 id 的主键。您可以定义 primaryKey 属性来覆盖这个约定。同样,您可以定义一个 connection 属性来覆盖在使用这个模型时所用的数据库连接。
读取模型数据
获取所有所有记录
$games =Game::all();
根据主键获取一条记录
$games =Game::fine(1);
[查询构建器] 中适用的函数在 Eloquent 模型的查询中同样适用。具体参考官方API手册
根据主键获取一条记录或者抛出一个异常
$model =User::findOrFail(1);$model =User::where('votes','>',100)->firstOrFail();
注册错误处理器,请监听 ModelNotFoundException
useIlluminate\Database\Eloquent\ModelNotFoundException;App::error(function(ModelNotFoundException $e){returnResponse::make('Not Found',404);});
指定查询的数据库连接
$user =User::on('connection-name')->find(1);
插入
$user =newUser;$user->name ='John';$user->save();
通常您的 Eloquent 模型将有自动递增的键。然而,如果您希望指定您自定义的键,在模型中设置 incrementing 属性为 false。
您也可以使用 create 函数在一行代码中保存一个新的模型。被插入的模型实例将从函数中返回。但是,在您这样做之前,您需要在模型中指定 fillable 或者 guarded 属性,因为所有 Eloquent 模型默认阻止集体赋值。
$user =User::create(array('name'=>'John'));
更新
$user =User::find(1);$user->email ='john@foo.com';$user->save();
有时您可能希望不仅保存模型,还有它的所有关系。为此,您可以使用 push 函数:
$user->push();
在一组模型上运行更新:
$affectedRows =User::where('votes','>',100)->update(array('status'=>2));
删除
$user =User::find(1);$user->delete();
根据主键删除一个模型
User::destroy(1);User::destroy(1,2,3);
一组模型中运行删除查询
$affectedRows =User::where('votes','>',100)->delete();
如果您希望简单的在一个模型中更新时间戳,可以使用 touch 函数
$user->touch();
软删除
并没有真的从数据库中删除。相反,一个 deleted_at 时间戳在记录中被设置。为一个模型开启软删除,在模型中指定 softDelete 属性
classUserextendsEloquent{protected $softDelete =true;}
在您的表中添加一个 deleted_at 字段,您可以在迁移中使用 softDeletes 函数:
$table->softDeletes();
当您在一个模型中调用 delete 函数,deleted_at字段将被设置为当前的时间戳。在使用软删除的模型中查询,被软删除的模型将不被包含进查询结果中。为了强制已删除的模型出现在结果集中,在查询中使用 withTrashed 函数:
$users =User::withTrashed()->where('account_id',1)->get();
希望在结果集中只包含软删除的模型,您可以使用 onlyTrashed 函数
$users =User::onlyTrashed()->where('account_id',1)->get();
恢复一个已被软删除的记录,使用 restore 函数:
$user->restore();
在查询中使用 restore 函数:
User::withTrashed()->where('account_id',1)->restore();
restore 函数也可以在关系中被使用:
$user->posts()->restore();
从数据库中真正删除一个模型,您可以使用 forceDelete 函数:
$user->forceDelete();
检测一个给定的模型实例是否被软删除,可以使用 trashed 函数:
if($user->trashed()){//}
查询范围
范围允许您容易在模型中重用查询逻辑。定义一个范围,简单的用 scope 为模型添加前缀
classUserextendsEloquent{publicfunction scopePopular($query){return $query->where('votes','>',100);}}
使用一个查询范围
$users =User::popular()->orderBy('created_at')->get();
使用参数
classUserextendsEloquent{publicfunction scopeOfType($query, $type){return $query->whereType($type);}}
然后在范围函数调用中传递参数:
$users =User::ofType('member')->get();
结束
[转]Laravel 4之Eloquent ORM的更多相关文章
- Laravel 数据库操作 Eloquent ORM
laravel 操作数据库一般都使用它的Eloquent ORM才操作 建立模型 <?php namespace App; use Illuminate\Database\Eloquent\Mo ...
- Laravel数据库操作 Eloquent ORM
模型首先在App目录下建立student的文件夹 里面放上 Student.php 且需要继承基类Model //允许批量赋值的字段// protected $fillable = ['name',' ...
- Laravel Eloquent ORM
Eloquent ORM 简介 基本用法 集体赋值 插入.更新.删除 软删除 时间戳 查询范围 关系 查询关系 预先加载 插入相关模型 触发父模型时间戳 与数据透视表工作 集合 访问器和调整器 日期调 ...
- [Laravel] 03 - DB facade, Query builder & Eloquent ORM
连接数据库 一.Outline 三种操作数据库的方式. 二.Facade(外观)模式 Ref: 解读Laravel,看PHP如何实现Facade? Facade本质上是一个“把工作推给别人做的”的类. ...
- laravel 5.1 使用Eloquent ORM 操作实例
Laravel 的 Eloquent ORM 提供了更优雅的ActiveRecord 实现来和数据库的互动. 每个数据库表对应一个模型文件. 数据库配置 .env文件(也可以直接修改config/da ...
- laravel通过Eloquent ORM实现CURD
//Eloquent ORM public function orm1() { //all(); 返回所有数据: /*$students=Student::all(); dd($students);* ...
- laravel Eloquent ORM联合查询出现Class not found,就算在Moel中存在这个类
今天发现一个坑,在处理Eloquent ORM的联合查询时,一直报错Class 'AdminGroup' not found ,可是我的项目中明明存在这个类,如下 这是我的模型类: 它们的控制器方法: ...
- laravel框架总结(八) -- ORM模型
ORM模型简介 1>什么是ORM? ORM,即 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在操作具体的 ...
- Eloquent ORM笔记
基本操作 新增 $user = new User; $user->name = 'John'; $user->save(); $insertedId = $user->id;//从对 ...
随机推荐
- WndProc函数(转)
WndProc函数作用: 主要用在拦截并处理系统消息和自定义消息 比如:windows程序会产生很多消息,比如你单击鼠标,移动窗口都会产生消息.这个函数就是默认的消息处理函数.你可以重载这个函数来制定 ...
- HTTP get、post请求
Post请求: string postData = "user=123&pass=456"; // 要发放的数据 byte[] byteArray = Encoding.U ...
- keydown和keypress
常见的键盘事件是keyup和keydown.淡蓝就经常用 document.onkeyup = function (e) { if ((e.keyCode || e.which) === 13) // ...
- otf VS ttf images
- Hibernate配置文件中映射元素详解
对象标识符号 在关系数据库表中,主键(Primary Key)用来识别记录,并保证每条记录的唯一性.在Java语言中,通过比较两个变量所引用对象的内存地址是否相同,或者比较两个变量引用的对象值是否相同 ...
- 列表:一个打了激素的数组 - 零基础入门学习Python010
列表:一个打了激素的数组 让编程改变世界 Change the world by program 列表:一个打了激素的数组 有时候我们需要把一堆东西暂时存储起来,因为他们有某种直接或者间接的联系,我们 ...
- 为什么1Byte=8bit
Byte是字节的意思,而字节在早期计算机内部是用标准ASCII码来表示的根据当时情况确定至多有128种需要表示的字符(当时是IBM的标准,现在普遍是255),也就是2的7次方用二进制的0和1来表示就需 ...
- RMAN备份FORMAT格式中%的含义
使用格式串先看例子:Configure channel 1 device type disk format 'd:/backup/orcl/backup_%U';在configure 命令中经常使用格 ...
- XJOI网上同步训练DAY3 T1
思路:看来我真是思博了,这么简单的题目居然没想到,而且我对复杂度的判定也有点问题.. 首先我们选了一个位置i的b,那一定只对i和以后的位置造成改变,因此我们可以这样看: 我们从前往后选,发现一个位置的 ...
- spoj 104 Highways (最小生成树计数)
题目链接:http://www.spoj.pl/problems/HIGH/ 题意:求最小生成树个数. #include<algorithm> #include<cstdio> ...