如何在Laravel5.8中正确地应用Repository设计模式(2)

$table->increments('id');

设置数据库

我将使用 MySQL 数据库作为示例,第一步就是创建一个新的数据库。

mysql -u root -p 
create database laravel_repository;

以上命令将会创建一个叫 laravel_repository 的新数据库。接下来我们需要添加数据库信息到 Laravel 根目录的 .env 文件中。

DB_DATABASE=laravel_repository
DB_USERNAME=root
DB_PASSWORD=secret

当你更新了 .env 文件后我们需要清空缓存:

php artisan config:clear

运行迁移

现在我们已经设置好了数据库,可以开始运行迁移了:

php artisan migrate

这将会创建 blogs 表,包含了我们在迁移中声明的 title , content 和 user_id 字段。

实现 repository 设计模式

一切就绪,我们现在可以开始实现 repository 设计风格了。我们将会在 app 目录中创建 Repositories 目录。我们将要创建的第二个目录是 Interfaces 目录,这个目录位于 Repositories 目录中。

在 Interfaces 文件中我们将创建一个包含两个方法的 BlogRepositoryInterface 接口。

  1. 返回所有博客文章的 all 方法
  2. 返回特定用户所有博客文章的 getByUser 方法
<?php

namespace App\Repositories\Interfaces;

use App\User;

interface BlogRepositoryInterface
{
 public function all();

 public function getByUser(User $user);
}

我们需要创建的最后一个类是将要实现 BlogRepositoryInterface 的 BlogRepository ,我们会写一个最简单的实现方式。

<?php

namespace App\Repositories;

use App\Models\Blog;
use App\User;
use App\Repositories\Interfaces\BlogRepositoryInterface;

class BlogRepository implements BlogRepositoryInterface
{
 public function all()
 {
  return Blog::all();
 }

 public function getByUser(User $user)
 {
  return Blog::where('user_id'. $user->id)->get();
 }
}

你的 Repositories 目录应该像这样:

app/
└── Repositories/
 ├── BlogRepository.php
 └── Interfaces/
  └── BlogRepositoryInterface.php

你现在已经成功创建了一个 repository 了。但是我们还没有完成,是时候开始使用我们的 repository 了。

在控制器中使用 Repository

要开始使用 BlogRepository ,我们首先需要将其注入到 BlogController 。由于 Laravel 的依赖注入,我们很容易用另一个来替换它。这就是我们控制器的样子:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1902.html