Laravel 5框架学习之Eloquent (laravel 的ORM)

前端技术 2023/09/08 PHP

我们来生成第一个模型

复制代码 代码如下:

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框架有所帮助。

本文地址:https://www.stayed.cn/item/22393

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。