Home >Backend Development >PHP Tutorial >Laravel 五 基础(七)- Eloquent (laravel 的ORM)

Laravel 五 基础(七)- Eloquent (laravel 的ORM)

WBOY
WBOYOriginal
2016-06-13 12:17:20799browse

Laravel 5 基础(七)- Eloquent (laravel 的ORM)

  • 我们来生成第一个模型
<code>php artisan make:model Article#输出Model created successfully.Created Migration: 2015_03_28_062517_create_articles_table</code>

查看一下生成的文件 app/Article.php

<code><?php namespace App;use Illuminate\Database\Eloquent\Model;class Article extends Model {	//}</code>

没什么特别的,除了继承自 Model 以外,但是具有强大的功能,这些都封装在laravel的Model中。模型自动具有了 save() update() findXXX() 等强大的功能。

  • tinker 是 laravel提供的命令行工具,可以和项目进行交互。
<code>php artisan tinker#以下是在tinker中的交互输入Psy Shell v0.4.1 (PHP 5.4.16 — cli) by Justin Hileman>>> $name = &#39;zhang jinglin&#39;;=> "zhang jinglin">>> $name=> "zhang jinglin">>> $article = new App\Article;=> <App\Article #000000005c4b7ee400000000ab91a676> {}>>> $article->title = &#39;My First Article&#39;;=> "My First Article">>> $article->body = &#39;Some content...&#39;;=> "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 = &#39;My First Update Title&#39;;=> "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(&#39;body&#39;, &#39;Some content...&#39;)->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(&#39;body&#39;, &#39;Some content...&#39;)->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([&#39;title&#39; => &#39;New Article&#39;, &#39;body&#39; => &#39;New body&#39;, &#39;published_at&#39; => Carbon\Carbon::now()]);Illuminate\Database\Eloquent\MassAssignmentException with message &#39;title&#39;</code>

MassAssignmentException,laravel保护我们不能直接插入记录。比如,在一些特殊情况下我们需要直接利用表单的信息填充数据库记录,但是如果我们并没有在表单中添加密码字段,而黑客产生了密码字段连同我们的其他字段一起送回服务器,这将产生修改密码的危险,所以我们必须明确的告诉laravel我们的模型那些字段是可以直接填充的。

修改我们的模型文件 Article.php

<code><?php namespace App;use Illuminate\Database\Eloquent\Model;class Article extends Model {	protected $fillable = [        &#39;title&#39;,        &#39;body&#39;,        &#39;published_at&#39;    ];}</code>

表示,title, body, published_at 是可以直接填充的。

退出 tinker,重新进入

<code>>>> $article = App\Article::create([&#39;title&#39; => &#39;New Article&#39;, &#39;body&#39; => &#39;New body&#39;, &#39;published_at&#39; => 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&#39;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([&#39;body&#39; => &#39;New Updaet Body&#39;]);=> true#update自动调用save()</code>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn