Laravel学习笔记(四)——模型,更安全的数据存取

qcgzxw 2018年10月22日 08:46 52

balabala

如果你是一个从没用接触过框架的新手,你在进行数据库操作的时候可能会创建数据库链接,然后进行数据操作,最后关闭数据库连接。这种方式听起来貌似不错,但是当程序复杂起来后,每个地方都要进行同样的数据库连接,关闭等操作,这必然就不符合代码复用的原则,并且难以维护(数据库信息更改后,需要改很多地方)。

所以就有了MVC模式,根据程序需求自行封装数据库操作类,需要进行数据库操作时,引入类文件,new一个数据库对象即可。如果数据库信息更改,也只需要更改数据库操作类,提升了代码的复用,也便于后期维护。

而在Laravel中的模型就相当于一个功能完善的数据库Helper类,不需要用户自己写,只要掌握基本用法就能很快速方便的对数据库进行操作,哪怕你一点不懂SQL语句。

看了接下来的Laravel模型的使用之后你就会爱上Laravel的Eloquent ORM模型,这也是我直接介绍模型而不讲解其他数据库操作的原因。

Laravel 数据库配置

要想使用模型,第一个要设置的当然是数据库信息。在第一章就有介绍到,数据库信息保存在项目根目录的 .env 文件中,找到相关的数据库信息,进行修改成自己的数据库配置保存即可。 2018-10-16_145316.png

Eloquent ORM

Laravel 的 Eloquent ORM 提供了漂亮、简洁的 ActiveRecord 实现来和数据库交互。每个数据库表都有一个对应的「模型」用来与该表交互。你可以通过模型查询数据表中的数据,并将新记录添加到数据表中。

定义(绑定)模型

模型创建

首先,用 php artisan make:model 命令创建模型文件(默认存放于/app目录下)。 2018-10-16_153111.png

模型设置

模板基础框架如下

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Test extends Model
{
    //
}

首先 我们要指定模板对应的 表

protected $table = "YourTableName";

然后定义主键名称

protected $primaryKey = 'user_id';//如不指定,默认主键为 'id'

指定可供批量复制的字段名

protected $fillable = ['name', 'age', 'sex'];// 批量复制白名单

禁止时间戳

public $timestamps = false;//默认情况下,Eloquent 会默认数据表中存在 created_at 和 updated_at 这两个字段。如果你不需要这两个字段,则需要在模型内将 $timestamps 属性设置为 false

模型获取

要对数据进行操作的第一步是获取操作对象。本章只介绍几个常用的简单的获取数据的方法,详细方法会单独一章写出用作资料查询!

获取某个学生信息并渲染到模板后输出

/app/Http/Controllers/StudentController.php

<?php

namespace App\Http\Controllers;

use App\Student;//Student模型

class StudentController extends Controller
{
    // Student detail
    public function detail($id)
    {
        $student = Student::find($id);// 获取ID为$id的对象
        return view('student.detail') -> with(['student' => $student]);// 将该对象的数据用student.detail模板渲染后输出
    }

}

resources/Views/student/detail.blade.php

@extends('app')

@section('title')
Student -> Index
@stop

@section('main')
<article>
    <h1>{{ $student -> name }}</h1>
    <!-- 用 -> 后面接属性名即可访问到对应的值 -->
    <p>{{ $student -> info }}</p>
</article>

@stop

模型操作

获取对象后只需要简单的几行语句即可对数据库进行操作,你不需要考虑数据库连接与断开,也不需要知道SQL语句,你只需要按照Eloquent ORM提供的方法进行对应的操作即可。

add/update

  1. new/获取一个Student对象
  2. 对各个字段名进行赋值
  3. 保存到数据库
use App\Student;//Student模型

$xiaoming = Student::find(1);// 获取已存在的学生对象小明(update)
$daming = new Student;// 新建一个学生对象大明(add)

$xiaoming->name = 'xiaoming';// 修改字段名
$daming->name = 'daming';// 赋值字段名

$xiaoming->save();// 保存至数据库
$daming->save();// 保存至数据库

drop

  1. 获取对象
  2. 删除对象
$xiaoming = Student::find(1);

$xiaoming->delete();

Eloquent ORM是通过调用laravel内置的方法来对数据库进行增删改查等操作的,这种方式很大程度上解决了数据库注入等安全问题,同时也增加了代码复用能力。它能让一个完全不懂SQL语句的新手,在短短几分钟设计出来完美的数据库查询语句。