$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 接口。
- 返回所有博客文章的 all 方法
- 返回特定用户所有博客文章的 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 的依赖注入,我们很容易用另一个来替换它。这就是我们控制器的样子: