• 我们来生成第一个模型
php artisan make:model Article
#输出
Model created successfully.
Created Migration: 2015_03_28_062517_create_articles_table

查看一下生成的文件 app/Article.php

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model {

	//

}

没什么特别的,除了继承自 Model 以外,但是具有强大的功能,这些都封装在laravel的Model中。模型自动具有了 save() update() findXXX() 等强大的功能。

  • tinker 是 laravel提供的命令行工具,可以和项目进行交互。
php artisan tinker

#以下是在tinker中的交互输入
Psy Shell v0.4.1 (PHP 5.4.16 — cli) by Justin Hileman
>>> $name = 'zhang jinglin';
=> "zhang jinglin" >>> $name
=> "zhang jinglin" >>> $article = new App\Article;
=> <App\Article #000000005c4b7ee400000000ab91a676> {} >>> $article->title = 'My First Article';
=> "My First Article" >>> $article->body = 'Some content...';
=> "Some content..." >>> $article->published_at = Carbon\Carbon::now();
=> <Carbon\Carbon #000000005c4b7ee600000000ab91dcb6> {
date: "2015-03-28 06:37:22",
timezone_type: 3,
timezone: "UTC"
} >>> $article;
=> <App\Article #000000005c4b7ee400000000ab91a676> {
title: "My First Article",
body: "Some content...",
published_at: <Carbon\Carbon #000000005c4b7ee600000000ab91dcb6> {
date: "2015-03-28 06:37:22",
timezone_type: 3,
timezone: "UTC"
}
} >>> $article->toArray();
=> [
"title" => "My First Article",
"body" => "Some content...",
"published_at" => <Carbon\Carbon #000000005c4b7ee600000000ab91dcb6> {
date: "2015-03-28 06:37:22",
timezone_type: 3,
timezone: "UTC"
}
] >>> $article->save();
=> true #查看数据结果,添加了一条记录 >>> App\Article::all()->toArray();
=> [
[
"id" => "1",
"title" => "My First Article",
"body" => "Some content...",
"published_at" => "2015-03-28 06:37:22",
"created_at" => "2015-03-28 06:38:53",
"updated_at" => "2015-03-28 06:38:53"
]
] >>> $article->title = 'My First Update Title';
=> "My First Update Title" >>> $article->save();
=> true >>> App\Article::all()->toArray();
=> [
[
"id" => "1",
"title" => "My First Update Title",
"body" => "Some content...",
"published_at" => "2015-03-28 06:37:22",
"created_at" => "2015-03-28 06:38:53",
"updated_at" => "2015-03-28 06:42:03"
]
] >>> $article = App\Article::find(1);
=> <App\Article #000000005c4b7e1600000000ab91a676> {
id: "1",
title: "My First Update Title",
body: "Some content...",
published_at: "2015-03-28 06:37:22",
created_at: "2015-03-28 06:38:53",
updated_at: "2015-03-28 06:42:03"
} >>> $article = App\Article::where('body', 'Some content...')->get();
=> <Illuminate\Database\Eloquent\Collection #000000005c4b7e1800000000ab91a676> [
<App\Article #000000005c4b7e1b00000000ab91a676> {
id: "1",
title: "My First Update Title",
body: "Some content...",
published_at: "2015-03-28 06:37:22",
created_at: "2015-03-28 06:38:53",
updated_at: "2015-03-28 06:42:03"
}
] >>> $article = App\Article::where('body', 'Some content...')->first();
=> <App\Article #000000005c4b7e1900000000ab91a676> {
id: "1",
title: "My First Update Title",
body: "Some content...",
published_at: "2015-03-28 06:37:22",
created_at: "2015-03-28 06:38:53",
updated_at: "2015-03-28 06:42:03"
}
>>> >>> $article = App\Article::create(['title' => 'New Article', 'body' => 'New body', 'published_at' => Carbon\Carbon::now()]);
Illuminate\Database\Eloquent\MassAssignmentException with message 'title'

MassAssignmentException,laravel保护我们不能直接插入记录。比如,在一些特殊情况下我们需要直接利用表单的信息填充数据库记录,但是如果我们并没有在表单中添加密码字段,而黑客产生了密码字段连同我们的其他字段一起送回服务器,这将产生修改密码的危险,所以我们必须明确的告诉laravel我们的模型那些字段是可以直接填充的。

修改我们的模型文件 Article.php

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model {

	protected $fillable = [
'title',
'body',
'published_at'
]; }

表示,title, body, published_at 是可以直接填充的。

退出 tinker,重新进入


>>> $article = App\Article::create(['title' => 'New Article', 'body' => 'New body', 'published_at' => Carbon\Carbon::now()]);
=> <App\Article #000000005051b2c7000000007ec432dd> {
title: "New Article",
body: "New body",
published_at: <Carbon\Carbon #000000005051b2c6000000007ec4081d> {
date: "2015-03-28 06:55:19",
timezone_type: 3,
timezone: "UTC"
},
updated_at: "2015-03-28 06:55:19",
created_at: "2015-03-28 06:55:19",
id: 2
} # It's ok >>> App\Article::all()->toArray();
=> [
[
"id" => "1",
"title" => "My First Update Title",
"body" => "Some content...",
"published_at" => "2015-03-28 06:37:22",
"created_at" => "2015-03-28 06:38:53",
"updated_at" => "2015-03-28 06:42:03"
],
[
"id" => "2",
"title" => "New Article",
"body" => "New body",
"published_at" => "2015-03-28 06:55:19",
"created_at" => "2015-03-28 06:55:19",
"updated_at" => "2015-03-28 06:55:19"
]
] >>> $article = App\Article::find(2);
=> <App\Article #000000005051b22b000000007ec432dd> {
id: "2",
title: "New Article",
body: "New body",
published_at: "2015-03-28 06:55:19",
created_at: "2015-03-28 06:55:19",
updated_at: "2015-03-28 06:55:19"
} >>> $article->update(['body' => 'New Updaet Body']);
=> true #update自动调用save()

Laravel 5 基础(七)- Eloquent (laravel 的ORM)的更多相关文章

  1. laravel框架基础知识总结

    一.laravel简介 laravel是一套优雅简介的PHP开发框架,受欢迎程度非常之高,功能强大,工具齐全:以下是本人在学习过程中记录的laravel比较基础的资料,权当学习笔记,请大神们多多指教 ...

  2. Laravel 推荐-基础入门+实战+拓展视频教程

    1.laravel基础 1.Composer:类库管理神器 - Laravel的安装和配置 2.路由:地址和方法的小媒人 - 基础路由 3.控制器:管家婆 - 基础用法 4.视图:最终结果输出 5.b ...

  3. laravel路由基础

    基础: 所有的laravel路由都定义在 app/Http/routes.php 这个文件里,会被框架自带加载.简单的路由会接受一个URI和一个Closure类. Route::get('foo', ...

  4. laravel基础课程---1、laravel安装及基础介绍(laravel如何安装)

    laravel基础课程---1.laravel安装及基础介绍(laravel如何安装) 一.总结 一句话总结: [修改composer镜像地址].[明确laravel的安装要求].[安装指定版本的la ...

  5. Bootstrap <基础七>按钮

    任何带有 class .btn 的元素都会继承圆角灰色按钮的默认外观.但是 Bootstrap 提供了一些选项来定义按钮的样式,具体如下表所示: 以下样式可用于<a>, <butto ...

  6. laravel(二):laravel基本入门 看到Hello Laravel

    1.Hello World 首先,我们来添加一些文字,在页面中显示.为了能访问网页,要启动程序服务器. $ php artisan serve 上述命令会启动 PHP 内建的开发服务器,要查看程序,请 ...

  7. C#_02.16_基础七_.NET表达式&运算符

    C#_02.16_基础七_.NET表达式&运算符 一.字面量: 字面量和变量的关系来理解字面量会比较简单: 因此字面量是源代码中键入已知的(我们知道它是多少的)值.也可以理解是等号右边的非创建 ...

  8. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...

  9. Java基础七-正则表达式

    Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...

  10. day 72 Django基础七之Ajax

    Django基础七之Ajax   本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 六 同源策略与 ...

随机推荐

  1. (easy)LeetCode 258.Add Digits

    Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. ...

  2. Oracle 版本历史

    1.数据库在项目开发里面,大多数都使用Oracle,什么8i,9i,10G,11g等,一直认为数据库版本的升级对于开发一个系统的开发人员来书,不是什么重要的事,我仅仅关注数据库的表结构以及存储过程或者 ...

  3. Grunt 之 RequireJS

    RequireJs 提供了一个打包工具 r.js,可以将相关的模块打包为一个文件.相关说明:http://www.requirejs.org/docs/optimization.html 将相关的脚本 ...

  4. cocos2d-x 中 TTF 字体文件的位置

    cocos2d-x 中,字体文件需要保存在 fonts 文件夹中,如果字体路径中没有 fonts/ 会自动添加上这个文件夹. 如果字体名称没有 .ttf 后缀,也会自动加上这个后缀. unsigned ...

  5. Linux下程序对拍_C++

    此博客需要付费才阅读,因为该博客实用性十分强,且十分容易理解 若需购买请联系博主,联系方式戳这 http://www.cnblogs.com/hadilo/p/5932395.html 主要介绍如何在 ...

  6. python学习笔记(win32print API介绍)

    最近博主在研究用python控制打印机 这里整理下win32print的API介绍,官网地址http://timgolden.me.uk/pywin32-docs/win32print.html Op ...

  7. 转载收藏- (TTL与CMOS)电路常识性概念

    原帖:http://blog.sina.com.cn/s/blog_48c0c0190101bbth.html

  8. hive安装(一)

    1.解压 [root@cluster3 hadoop]# tar -zxvf apache-hive--bin.tar.gz 2.修改环境变量 export HIVE_HOME=/usr/local/ ...

  9. Javascript中的Bind 、Call和Apply

    看以下代码: var bind = Function.prototype.call.bind(Function.prototype.bind); 第一眼看上去,我能猜出它究竟是用来做什么的.它把x.y ...

  10. phongap+ jquery + asp.net +android,我把我遇到的问题和处理方法的连接总结一下

    这些都是最基本的问题,在实际的运用中都会用到 第1章.搭建Android的开发环境-跟我学编程 Win7旗舰版中的IIS配置asp.net的运行环境 - 追夢 - 博客园 vs2012下asp.net ...