📅  最后修改于: 2023-12-03 14:43:45.683000             🧑  作者: Mango
Laravel是一款流行的PHP Web应用程序框架,它被广泛使用在开发高质量Web应用程序中。Laravel ORM是Laravel的一个非常强大的组件,它允许程序员在不使用任何SQL的情况下,通过面向对象的方式来表示数据库表以及它们之间的关系。本教程将为您提供有关Laravel ORM的全面介绍,以及如何使用它来管理MySQL数据库。
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还允许您使用限制器来筛选模型。以下是一些常见的限制器:
例如,要获取作者为J.D. Salinger的所有书籍,并按照发行日期排序,可以执行以下代码:
$books = Book::where('author', 'J.D. Salinger')
->orderBy('created_at', 'desc')
->get();
在上面的代码中,我们使用where()方法来限制作者为“J.D. Salinger”,并使用orderBy()方法按created_at字段进行倒序排序。
Laravel ORM还允许您使用查询构建器,这是一种基于方法链的查询方式。查询构建器允许您按照自己的需要动态构建查询。以下是一些常见的查询构建器方法:
例如,要获取所有与作者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的所有功能。