📜  laravel orm 教程 - PHP (1)

📅  最后修改于: 2023-12-03 14:43:45.683000             🧑  作者: Mango

Laravel ORM教程 - PHP

Laravel是一款流行的PHP Web应用程序框架,它被广泛使用在开发高质量Web应用程序中。Laravel ORM是Laravel的一个非常强大的组件,它允许程序员在不使用任何SQL的情况下,通过面向对象的方式来表示数据库表以及它们之间的关系。本教程将为您提供有关Laravel ORM的全面介绍,以及如何使用它来管理MySQL数据库。

ORM概述

ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,它将关系型数据库中的表和数据转换为面向对象的结构,使得程序员可以通过面向对象的方式来操作数据库表。ORM把数据库表映射到程序中的类和对象上,并允许开发者以类似于操作对象的方式来进行数据库操作。

Laravel的ORM组件是一个非常强大的工具,允许您快速地建立模型,处理数据库迁移,以及执行各种各样的操作,如查询、插入、更新和删除。ORM允许您在不使用原生SQL或其他ORM库的情况下,通过模型和关联模型的方式来访问数据库。

安装

要使用Laravel ORM,您需要安装Laravel。有关如何安装Laravel,请参见Laravel官方文档

建立模型

在Laravel中,模型是ORM的核心。模型是一个代表数据库表的类,它包含了表中的所有属性和方法。模型允许您使用PHP代码来操作数据库表。

要建立模型,首先需要创建一个模型类,该类必须继承Laravel提供的Eloquent类。例如,假设您要建立一个名为Book的模型类,可以在app/Models目录中创建一个Book.php文件,如下所示:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    // Table name
    protected $table = 'books';

    // Primary key
    protected $primaryKey = 'id';

    // Timestamps
    public $timestamps = true;

    // Fillable fields
    protected $fillable = [
        'title', 'author', 'description'
    ];
}

在上面的代码中,我们定义了一个名为Book的模型类。该类继承了Illuminate\Database\Eloquent\Model类,该类包含了ORM的所有核心功能。我们还定义了一些其他属性:

  • $table:定义了数据库表的名称。
  • $primaryKey:定义了主键的名称。
  • $timestamps:定义了是否在表中自动维护created_at和updated_at字段。
  • $fillable:定义了可以被批量赋值的字段。
数据库迁移

Laravel ORM还提供了一种方便的方式来管理数据库表:数据库迁移。迁移允许您通过编写PHP代码来协作式地管理数据库模式的变化。

要创建一个数据库迁移,可以使用Artisan命令行工具。例如,要创建一个books表,可以执行以下命令:

php artisan make:migration create_books_table --create=books

这将在database/migrations目录中创建一个名为YYYY_MM_DD_HHiiss_create_books_table.php的迁移文件。打开此文件,并添加以下代码:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateBooksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->string('author');
            $table->text('description');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('books');
    }
}

在上面的代码中,我们定义了一个名为CreateBooksTable的迁移类。该类包含了两个方法:

  • up()方法:定义了如何创建一个books表。
  • down()方法:定义了如何撤销创建books表。

up()方法中,我们调用了Schema::create()方法来创建一个名为books的数据库表。该表包含了一个自增长的ID字段、一个字符串类型的title字段、一个字符串类型的author字段、一个文本类型的description字段,以及自动维护的时间戳。

建立数据

要在数据库中添加数据,可以使用模型的create()方法。例如,要创建一本新书,可以执行以下代码:

Book::create([
    'title' => 'The Catcher in the Rye',
    'author' => 'J.D. Salinger',
    'description' => 'A story about a teenage boy named Holden Caulfield'
]);

在上面的代码中,我们调用了Book模型的create()方法,这将创建一本新书并将其保存到数据库中。

查询数据

Laravel ORM提供了许多灵活的查询方法,以便您可以根据您的需要检索数据。以下是一些常见的查询操作:

获取单个模型

要获取单个模型,可以使用模型的find()方法。例如,要获取ID为1的书,可以执行以下代码:

$book = Book::find(1);

在上面的代码中,我们调用了Book模型的find()方法并传递一个ID值。该方法将返回对应ID的模型实例,如果未找到则返回null。

获取多个模型

要获取多个模型,可以使用模型的all()方法。例如,要获取所有书籍,可以执行以下代码:

$books = Book::all();

在上面的代码中,我们调用了Book模型的all()方法,该方法将返回一个包含所有模型实例的Eloquent集合。

使用限制器

Laravel ORM还允许您使用限制器来筛选模型。以下是一些常见的限制器:

  • where()方法:根据指定的条件筛选模型。
  • orderBy()方法:按指定的字段对模型进行排序。
  • limit()方法:限制查询结果的数量。

例如,要获取作者为J.D. Salinger的所有书籍,并按照发行日期排序,可以执行以下代码:

$books = Book::where('author', 'J.D. Salinger')
             ->orderBy('created_at', 'desc')
             ->get();

在上面的代码中,我们使用where()方法来限制作者为“J.D. Salinger”,并使用orderBy()方法按created_at字段进行倒序排序。

使用查询构建器

Laravel ORM还允许您使用查询构建器,这是一种基于方法链的查询方式。查询构建器允许您按照自己的需要动态构建查询。以下是一些常见的查询构建器方法:

  • select()方法:选择要查询的字段。
  • join()方法:连接一个或多个相关表。
  • where()方法:根据指定的条件筛选模型。
  • orderBy()方法:按指定的字段对模型进行排序。
  • limit()方法:限制查询结果的数量。

例如,要获取所有与作者J.D. Salinger相关的书籍,并仅返回其标题字段,可以执行以下代码:

$books = DB::table('books')
            ->join('authors', 'books.author_id', '=', 'authors.id')
            ->where('authors.name', '=', 'J.D. Salinger')
            ->select('books.title')
            ->get();

在上面的代码中,我们使用DB类的table()方法来指定要查询的表,并使用join()方法连接了一个名为authors的相关表。我们使用where()方法限制了作者为“J.D. Salinger”,并使用select()方法仅选择了books.title字段。

更新数据

要更新数据,可以使用模型的update()方法。例如,要将ID为1的书的标题更改为“The Catcher in the Rye”,可以执行以下代码:

$book = Book::find(1);
$book->title = 'The Catcher in the Rye';
$book->save();

在上面的代码中,我们首先使用find()方法来获取ID为1的书的模型实例。然后,我们将其标题更改为“The Catcher in the Rye”,并使用save()方法将更改保存回数据库。

删除数据

要从数据库中删除数据,可以使用模型的delete()方法。例如,要删除ID为1的书籍,可以执行以下代码:

$book = Book::find(1);
$book->delete();

在上面的代码中,我们首先使用find()方法获取ID为1的书籍的模型实例。然后,我们调用了delete()方法,将书籍从数据库中删除。

关联模型

Laravel ORM还允许您通过关联模型的方式来访问其他表中的数据。以下是一些常见的关联类型:

  • 一对一关联:将一张表中的数据与另一张表中的单个数据相关联。
  • 一对多关联:将一张表中的数据与另一张表中的多个数据相关联。
  • 多对多关联:将一张表中的数据与另一张表中的多个数据相关联,并且这两个表之间存在交错的映射关系。

例如,假设您有一个名为User的模型,它表示应用程序中的用户,并且每个用户都可以拥有一本或多本书。在这种情况下,我们可以使用一对多关联来关联User模型和Book模型。

首先,我们需要在User模型中定义books()方法。该方法返回了一个关联类,它表示User模型和Book模型之间的关系。我们可以使用hasMany()方法来定义一对多关系。例如,以下是User模型的books()方法的代码:

public function books()
{
    return $this->hasMany(Book::class);
}

然后,在Book模型中,我们需要定义一个belongsTo()方法,以便我们能够通过User模型访问相应的用户。例如,以下是Book模型的belongsTo()方法的代码:

public function user()
{
    return $this->belongsTo(User::class);
}

现在,我们可以通过User模型来访问与该用户相关联的所有书籍。例如:

$user = User::find(1);
$books = $user->books;

在上面的代码中,我们首先使用find()方法获取ID为1的用户的模型实例。然后,我们可以通过books属性来访问与该用户相关的所有书籍。

结论

在本教程中,我们介绍了Laravel ORM的基本概念,并演示了ORM如何帮助您更轻松地操作数据库。我们展示了如何建立模型、使用数据库迁移、查询数据、更新数据、删除数据以及如何关联模型。这应该是足够的,使您能够开始使用Laravel ORM在Web应用程序中管理数据了。Laravel文档是一个非常好的追溯点,它提供了丰富的信息和示例,帮助您更好地了解Laravel ORM的所有功能。