Laravel Repositories is a package for Laravel 5 which is used to abstract the database layer. This makes applications much easier to maintain.
Run the following command from you terminal:
composer require "bosnadev/repositories: 0.*"
or add this to require section in your composer.json file:
"bosnadev/repositories": "0.*"
then run composer update
First, create your repository class. Note that your repository class MUST extend Bosnadev\Repositories\Eloquent\Repository
and implement model() method
<?php namespace App\Repositories;
use Bosnadev\Repositories\Contracts\RepositoryInterface;
use Bosnadev\Repositories\Eloquent\Repository;
class FilmsRepository extends Repository {
public function model() {
return 'App\Film';
}
}
By implementing model()
method you telling repository what model class you want to use. Now, create App\Film
model:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Film extends Model {
protected $primaryKey = 'film_id';
protected $table = 'film';
protected $casts = [
"rental_rate" => 'float'
];
}
And finally, use the repository in the controller:
<?php namespace App\Http\Controllers;
use App\Repositories\FilmsRepository as Film;
class FilmsController extends Controller {
private $film;
public function __construct(Film $film) {
$this->film = $film;
}
public function index() {
return \Response::json($this->film->all());
}
}
The following methods are available:
public function all($columns = array('*'))
public function lists($value, $key = null)
public function paginate($perPage = 1, $columns = array('*'));
public function create(array $data)
// if you use mongodb then you'll need to specify primary key $attribute
public function update(array $data, $id, $attribute = "id")
public function delete($id)
public function find($id, $columns = array('*'))
public function findBy($field, $value, $columns = array('*'))
public function findAllBy($field, $value, $columns = array('*'))
public function findWhere($where, $columns = array('*'))
public function apply($model, Repository $repository)
Create a new film in repository:
$this->film->create(Input::all());
Update existing film:
$this->film->update(Input::all(), $film_id);
Delete film:
$this->film->delete($id);
Find film by film_id;
$this->film->find($id);
you can also chose what columns to fetch:
$this->film->find($id, ['title', 'description', 'release_date']);
Get a single row by a single column criteria.
$this->film->findBy('title', $title);
Or you can get all rows by a single column criteria.
$this->film->findAllBy('author_id', $author_id);
Get all results by multiple fields
$this->film->findWhere([
'author_id' => $author_id,
['year','>',$year]
]);
Criteria is a simple way to apply specific condition, or set of conditions to the repository query. Your criteria class MUST extend the abstract Bosnadev\Repositories\Criteria\Criteria
class.
Here is a simple criteria:
<?php namespace App\Repositories\Criteria\Films;
use Bosnadev\Repositories\Criteria\Criteria;
use Bosnadev\Repositories\Contracts\RepositoryInterface as Repository;
class LengthOverTwoHours extends Criteria {
/**
* @param $model
* @param RepositoryInterface $repository
* @return mixed
*/
public function apply($model, Repository $repository)
{
$model = $model->where('length', '>', 120);
return $model;
}
}
Now, inside you controller class you call pushCriteria method:
<?php namespace App\Http\Controllers;
use App\Repositories\Criteria\Films\LengthOverTwoHours;
use App\Repositories\FilmsRepository as Film;
class FilmsController extends Controller {
/**
* @var Film
*/
private $film;
public function __construct(Film $film) {
$this->film = $film;
}
public function index() {
$this->film->pushCriteria(new LengthOverTwoHours());
return \Response::json($this->film->all());
}
}
This package is largely inspired by this great package by @andersao. Here is another package I used as reference.
初学spring boot,遇到的第一个坎就是好多注解都不知道作用,即使照猫画虎把代码敲出来运行成功,也没有些许成就感。原因其实很简单,我觉得自己还没真的学会。接下来就是找资料,理解原理与过程,不求理解的深度,起码也得把自己说服了。本文档是从英语文档翻译过来,外加了一些自己的理解,其中表述错误的地方还望留言指正。 源文档链接:http://zetcode.com/springboot/reposi
maven snapshot和release版本的区别 Maven的Snapshot版本与Release版本 1. Snapshot版本代表不稳定、尚处于开发中的版本 2. Release版本则代表稳定的版本 3. 什么情况下该用SNAPSHOT? 协同开发时,如果A依赖构件B,由于B会更新,B应该使用SNAPSHOT来标识自己。这种做法的必要性可以反证如下: a.如果B不用
不多废话,直接看源码 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Repository { @AliasFor( annotation = Component.class ) String va
2.1 自定义Repository接口 要定义一个repository接口,你首先需要自定义一个实体类专用的Repository接口。该接口必须扩展 Repository,并将其类型指定为实体类和实体类的 ID 类型。 如果你想为该实体类资源类型开放CRUD方法,请直接继承CrudRepository而不是Repository。 2.1.1 repository接口定义 通常,你的reposito
前言 之前写过一篇关于MongoDB的总结 其中就已经包含了SpringBoot操作MongoDB之MongoRepository了 但是因为觉得单单与Springboot内容就比较多,而且开发时还会进行多次补充总结, 觉得独立出来一篇是非常必要的,所以就有这篇的出现。 参考链接 NoSQL_MongoDB Spring data Mongodb Query以分页 时间线 20200825-完成初
最近在创建一个多module的springnoot项目时,发现项目启动一直扫描不到@Repository注释的类。 报错如下: Description: Field helloService in com.example.demo.service.TestService required a bean of type 'com.example.test.modules1.service.repo
个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间。它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问。Repository是仓库管理员,领域层需要什么东西只需告诉仓库管理员,由仓库管理员把东西拿给它,并不需要知道东西实际放在哪。 1. Repository模式是架构模式,在设计架构时,才有参考价值; 2. Repo
Spring Data MongoRepository 如何像 MySql 那样进行 in 查询操作? 可以参考: @Repository public interface QuestionRepository extends MongoRepository<Question, String> { List<Question> findByTagsIn(List<String> tags
错误:Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again 通过yum -y install XXX 尝试安装软件,出现Cannot retrieve repository metadata (repomd.xml) for reposi
问题内容: 我试图理解为什么我不能自动装配类存储库,但可以自动装配 同一程序包 中的接口存储库以进行 相同的测试 。启动应用程序时,相同的存储库可以按预期工作。 一,错误: 我有一个非常简单的例子。考试: 存储库类: 存储库接口: 在经历了与此相同的错误的糟糕经历之后,我试图在我的配置中找到一些详细信息,或者测试导致此问题的原因。另一种可能性是不支持类存储库。 问题答案: 我认为我对这个问题是正确
问题内容: 我在弄清楚究竟如何使用@RepositoryRestResource接口来创建两个相当简单的实体之间的多对多关系时遇到了麻烦。 例如,我有一个简单的父子实体关系,如下所示: 我的存储库正在使用普通的Spring @RepositoryRestResource HATEOS API: 我已经成功地使用POST创建了单独的ParentEntity和ChildEntity,但似乎无法弄清楚如
问题内容: 可以继承@Repository批注吗? 我可以创建一个 然后扩展它而不指定@Repository批注? 我如何知道注释是否可以继承? 问题答案: 参见http://www.docjar.com/html/api/org/springframework/stereotype/Repository.java.html 没有@Inherited批注,因此它不会被继承。
问题内容: 我目前正在尝试使用Spring Data存储库来删除一些实体。Delete调用可以正常工作,没有任何异常/错误消息,但是此后不会删除该实体。 这些是我的实体: 和 该存储库非常简单: 删除呼叫就像 有什么想法为什么这种变化没有反映在数据库中? 编辑1: 我找到了解决方法,但我仍然不明白真正的问题是什么。如果我这样删除帖子,它“起作用”(由于违反约束,有几个例外,但帖子仍被删除): 编辑
问题内容: 我有存储库“ ClientRepository”: 当我请求http:// localhost:8080 / clients / 1时, 服务器响应 响应具有预期的链接。 当我在另一个控制器中调用存储库继承的方法findOne时 它回应 为什么在第二种情况下响应不包含链接?如何使Spring添加他们的响应? 问题答案: HATEOAS功能仅对于带有注释的Spring数据jpa存储库可用
问题内容: 我有这样的代码: 资料库 服务 我不知道为什么我可以调用“ interface EquipmentRepository”方法。EquipmentRepository是一个接口,对吗? 问题答案: Spring Repository负责将DAO导入DI容器,并将未检查的异常导入Spring 。Spring Repository批注使用@Component批注进行元注释,以便将存储库类用于
问题内容: 我需要在Spring Data Repository中使用原始SQL,这可能吗?我看到的所有内容始终都是基于实体的。 问题答案: @Query批注允许通过将nativeQuery标志设置为true来执行本地查询。 引用Spring Data JPA 参考文档。 另外,请参阅本节以了解如何使用命名的本机查询。
问题内容: 我正在开发一个Spring Boot应用程序,并且在这里遇到了一个问题。我试图注入一个@Repository注释的接口,它似乎根本不起作用。我收到这个错误 这是我的代码: 主要应用类别: Entity class: Repository interface: Controller: build.gradle application.properties: 我什至将我的代码与Access