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 相关文章推荐
经典的PHPer为什么被认为是草根?
Apr 02 PHP
一家之言的经验之谈php+mysql扎实个人基本功
Mar 27 PHP
C# Assembly类访问程序集信息
Jun 13 PHP
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
利用PHP将部分内容用星号替换
Apr 21 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
Sep 11 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
JavaScript学习笔记之定时器
2015/01/22 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
python K近邻算法的kd树实现
2018/09/06 Python
python实现字符串和字典的转换
2018/09/29 Python
用Python实现读写锁的示例代码
2018/11/05 Python
python实现月食效果实例代码
2019/06/18 Python
Python获取时间戳代码实例
2019/09/24 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
python logging模块的使用
2020/09/07 Python
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
小学生国旗下演讲稿
2014/04/25 职场文书
体育口号大全
2014/06/18 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
大学辅导员述职报告
2015/01/10 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
政协工作总结2015
2015/05/20 职场文书
简爱读书笔记
2015/06/26 职场文书