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 相关文章推荐
15个小时----从修改程序到自己些程序
Oct 09 PHP
php&amp;java(二)
Oct 09 PHP
很实用的一个完整email发送程序
Oct 09 PHP
php 静态页面中显示动态内容
Aug 14 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
PHP实现读取一个1G的文件大小
Aug 24 PHP
实例讲解PHP设计模式编程中的简单工厂模式
Feb 29 PHP
php实现图片按比例截取的方法
Feb 06 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
php使用json-schema模块实现json校验示例
Sep 28 PHP
Yii框架的redis命令使用方法简单示例
Oct 15 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 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中去掉字符串首尾空格的方法
2012/05/19 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
Vue单页及多页应用全局配置404页面实践记录
2018/05/22 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
JavaScript实现拖动对话框效果的实现代码
2020/10/12 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
python中enumerate的用法实例解析
2014/08/18 Python
关于反爬虫的一些简单总结
2017/12/13 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
python识别验证码的思路及解决方案
2020/09/13 Python
彻底解决Python包下载慢问题
2020/11/15 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
纬创Java面试题笔试题
2014/10/02 面试题
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
汽车检测与维修个人求职信
2013/09/24 职场文书
财务人员个人自荐信范文
2013/09/26 职场文书
2013英文求职信模板范文
2013/11/15 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
医院合作协议书
2014/08/19 职场文书
政协会议宣传标语
2014/10/09 职场文书
行为规范主题班会
2015/08/13 职场文书