Laravel 5框架学习之Eloquent (laravel 的ORM)


Posted in PHP onApril 08, 2015

我们来生成第一个模型

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()

以上所述就是本文的全部内容了,希望能够对大家学习Laravel5框架有所帮助。

PHP 相关文章推荐
网友原创的PHP模板类代码
Sep 07 PHP
php array_unique之后json_encode需要注意
Jan 02 PHP
Zend的MVC机制使用分析(一)
May 02 PHP
分享PHP header函数使用教程
Sep 05 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
php使用fullcalendar日历插件详解
Mar 06 PHP
PHPstorm激活码2020年5月13日亲测有效
Sep 17 PHP
PHP7 字符串处理机制修改
Mar 09 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 #PHP
Laravel 5框架学习之环境与配置
Apr 08 #PHP
Laravel 5框架学习之Blade 简介
Apr 08 #PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
Apr 08 #PHP
Laravel 5框架学习之向视图传送数据
Apr 08 #PHP
Laravel 5框架学习之路由、控制器和视图简介
Apr 07 #PHP
Laravel 5框架学习之Laravel入门和新建项目
Apr 07 #PHP
You might like
php strcmp使用说明
2010/04/22 PHP
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
javascript整除实现代码
2010/11/23 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
Python查询IP地址归属完整代码
2017/06/21 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
python 获取计算机的网卡信息
2021/02/18 Python
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
班组长安全生产职责
2013/12/16 职场文书
我为自己代言广告词
2014/03/18 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
个人贷款收入证明
2014/10/26 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
七一表彰大会简报
2015/07/20 职场文书