zoukankan      html  css  js  c++  java
  • 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 模型操作

    参考:实验楼

  • 相关阅读:
    【原创】(九)Linux内存管理
    【原创】(八)Linux内存管理
    【原创】(六)Linux内存管理
    【原创】(四)Linux内存模型之Sparse Memory Model
    2019年总结
    被低估的.NET(下)-2019 中国.NET 开发者峰会
    《.NET内存管理宝典》阅读指南
    《 .NET并发编程实战》扩展阅读
    《 .NET并发编程实战》阅读指南
    《 .NET并发编程实战》阅读指南
  • 原文地址:https://www.cnblogs.com/zswbky/p/8454118.html
Copyright © 2011-2022 走看看