PHP laravel之模型&Eloquent

一、Eloquent简介

Laravel 的 Eloquent ORM 提供了漂亮、简洁的 ActiveRecord 实现来和数据库进行交互。

每个数据库表都有一个对应的「模型」可用来跟数据表进行交互。你可以通过模型查询数据表内的数据,以及将记录添加到数据表中。

二、定义模型

模型文件默认放在 app 目录下,打开该目录,可以看到 Laravel 默认生成的用户模型 user.php ,打开这个文件。
user.php

<?php

namespace App;

use IlluminateAuthAuthenticatable;
use IlluminateDatabaseEloquentModel;
use IlluminateAuthPasswordsCanResetPassword;
use IlluminateContractsAuthAuthenticatable as AuthenticatableContract;
use IlluminateContractsAuthCanResetPassword as CanResetPasswordContract;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
    use Authenticatable, CanResetPassword;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['name', 'email', 'password'];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = ['password', 'remember_token'];
}

protected $table = 'users'; 设置了数据表的名称。

protected $fillable = ['name', 'email', 'password']; 设置了可以更新的字段。

protected $hidden = ['password', 'remember_token']; 设置了哪些字段会被隐藏。

三、创建模型

我们也可以创建一个新的模型,例如使用 artisan 创建一个 Article 模型:

cd ~/Code/myweb
php artisan make:model Article

打开 app 目录即可看到我们创建的 Article 模型文件。

四、数据读取

一旦你创建并关联了一个模型到数据表上,那么你就可以从数据库中获取数据。

可以把每个 Eloquent 模型想像成强大的查询构造器,它让你可以流畅地查询与模型关联的数据表。

比如下面这段代码可以取出 users 数据表中的所有数据。

<?php
use AppUser;

$users = AppUser::all();

foreach ($users as $user) {
    echo $user->name;
}

或者用下面这段代码来对数据进行筛选,来选出 users 表中 active 字段为 1,的数据并且按照 age 倒序排列,然后取出前十条。

$users = AppUser::where('active', 1)
               ->orderBy('age', 'desc')
               ->take(10)
               ->get();

当然了,你也可以通过 find() 和 first() 方法来取回单条记录。

// 通过主键取回一个模型...
$flight = AppFlight::find(1);

// 取回符合查询限制的第一个模型 ...
$flight = AppFlight::where('active', 1)->first();

你也可以用主键的集合为参数调用 find 方法,它将返回符合条件的集合:

$flights = AppFlight::find([1, 2, 3]);

有时你可能希望在找不到数据时抛出一个异常,这在路由或是控制器内特别有用。

findOrFail() 以及 firstOrFail() 方法会取回查询的第一个结果。如果没有找到相应结果,则会抛出一个异常:

$model = AppFlight::findOrFail(1);
$model = AppFlight::where('legs', '>', 100)->firstOrFail();

五、数据添加

要在数据库中创建一条新记录,只需创建一个新模型实例,并在模型上设置属性和调用 save 方法即可:

<?php

namespace AppHttpControllers;

use AppUser;
use IlluminateHttpRequest;
use AppHttpControllersController;

class FlightController extends Controller
{
    /**
     * 创建一个新的用户实例。
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        // 验证请求...

        $user = new User;

        $user->name = $request->name;

        $user->save();
    }
}

在这个例子中,我们把来自 HTTP 请求中的 name 参数简单地指定给 AppUser 模型实例的 name 属性。

当我们调用 save() 方法,就会添加一条记录到数据库中。

当 save() 方法被调用时,created_at 以及 updated_at 时间戳将会被自动设置,因此我们不需要去手动设置它们。

六、数据更新

save() 方法也可以用于更新数据库中已经存在的模型。

要更新模型,则须先取回模型,再设置任何你希望更新的属性,接着调用 save() 方法就可以了。

$user = AppUser::find(1);

$user->name = 'New User Name';

$user->save();

七、数据删除

在模型实例上调用 delete() 方法来删除数据:

$user = AppUser::find(1);

$user->delete();

在上面的例子中,我们在调用 delete 方法之前会先从数据库中取回了这个模型。

我们也可以不用取回直接删除它

直接删除,使用 destroy() 方法:

AppUser::destroy(1);

AppUser::destroy([1, 2, 3]);

AppUser::destroy(1, 2, 3);

通过查询来删除模型
当然了,你也可以删除某些满足条件的数据,例如我们删除所有被标为不活跃的用户:

$deletedRows = AppUser::where('active', 0)->delete();

八、Tinker

通过上述知识的学习,你应该对 Eloquent ORM 模型 有了一定的了解,但是要想熟练掌握,总要实际操作一下才行。

Laravel 内置了一个小工具可以用来快速调试数据库的数据 php artisan tinker。

Laravel artisan 的 tinker 是一个 REPL (read-eval-print-loop),REPL 是指 交互式命令行界面,它可以让你输入一段代码去执行,并把执行结果直接打印到命令行界面里。

接下来我们就使用 Tinker 来实际联系一下数据操作:

1.首先要配置一下数据库

(保存环境的同学可跳过这一步)根据上次实验学过的知识快速完成配置

sudo service mysql start
mysql -u root -p
create database myweb;

.env文件

DB_HOST=localhost
DB_DATABASE=myweb
DB_USERNAME=root
DB_PASSWORD=

2.然后执行迁移生成数据表

cd ~/Code/myweb
php artisan migrate

3.使用 artisan 打开 tinker

php artisan tinker

这里写图片描述

4.添加一个用户

$user = new AppUser;
$user -> name = 'SadCreeper';
$user -> email = '12345@qq.com';
$user -> password = 'password';
$user -> save();


这里写图片描述

添加用户1


这里写图片描述

5.查看用户信息

AppUser::find(1);

6.更新用户信息

$user = AppUser::find(1);

$user->name = 'HappyCreeper';

$user->save();


这里写图片描述

7.删除用户信息

AppUser::destroy(1);
AppUser::find(1);

九、小结

通过本次实验,我们了解了 Laravel 是如何对数据进行基本操作的。在实际的开发中,数据操作将会更加复杂,包括非常重要的 Eloquent 模型间关系。

作为一个基础教程,我省去了一些对于新手不易理解的内容,来最大化降低学习门槛,更多的 Eloquent 模型操作

参考:实验楼

原文地址:https://www.cnblogs.com/zswbky/p/8454118.html