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 相关文章推荐
mysql+php分页类(已测)
Mar 31 PHP
用PHP程序实现支持页面后退的两种方法
Jun 30 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
smarty表格换行实例
Dec 15 PHP
详解PHP对数组的定义以及数组的创建方法
Nov 27 PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 PHP
php导出生成word的方法
Dec 25 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 PHP
php操作redis命令及代码实例大全
Nov 19 PHP
php swoft框架实例用法
Dec 22 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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图片上传类带图片显示
2006/11/25 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
2011/10/13 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
用Python实现换行符转换的脚本的教程
2015/04/16 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
详解anaconda安装步骤
2020/11/23 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
eBay奥地利站:eBay.at
2019/07/24 全球购物
九年级科学教学反思
2014/01/29 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
Pandas自定义选项option设置
2021/07/25 Python
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android