Laravel 5框架学习之Eloquent (laravel 的ORM)
程序员文章站
2022-04-20 22:33:20
我们来生成第一个模型
复制代码 代码如下:
php artisan make:model article
#输出
model created successfull...
我们来生成第一个模型
复制代码 代码如下:
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框架有所帮助。
推荐阅读
-
Laravel 5框架学习之模型、控制器、视图基础流程
-
Laravel 5框架学习之向视图传送数据_php实例
-
Laravel学习笔记之Artisan命令生成自定义模板的方法
-
详解PHP的Laravel框架中Eloquent对象关系映射使用
-
Laravel框架Eloquent ORM新增数据、自定义时间戳及批量赋值用法详解
-
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
-
Laravel框架Eloquent ORM修改数据操作示例
-
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
-
Laravel框架Eloquent ORM删除数据操作示例
-
laravel框架学习记录之表单操作详解