Home  >  Article  >  Backend Development  >  Laravel 5 Basics (7) - Eloquent (laravel's ORM)

Laravel 5 Basics (7) - Eloquent (laravel's ORM)

WBOY
WBOYOriginal
2016-08-08 09:26:51834browse
  • Let’s generate the first model
<code>php artisan make:model Article
#输出
Model created successfully.
Created Migration: 2015_03_28_062517_create_articles_table</code>

Check the generated file app/Article.php

<code><?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model {

	//

}</code>

Nothing special, except that it inherits from Model, but it has powerful functions, which are all encapsulated in Laravel’s Model. The model automatically has powerful functions such as save() update() findXXX().

  • Tinker is a command line tool provided by laravel that can interact with projects.
<code>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'</code>

MassAssignmentException, laravel protects us from inserting records directly. For example, in some special cases we need to directly use the form information to fill database records, but if we do not add a password field to the form, and a hacker generates a password field and sends it back to the server together with our other fields, this will cause modifications Passwords are dangerous, so we must explicitly tell laravel which fields of our model can be filled directly.

Modify our model file 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>

means that title, body, published_at can be filled directly.

Exit tinker and re-enter

<code>
>>> $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()
</code>

The above has introduced the basics of Laravel 5 (7) - Eloquent (laravel's ORM), including various aspects. I hope it will be helpful to friends who are interested in PHP tutorials.

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