当前位置: 首页 > 软件库 > Web应用开发 > Web框架 >

repository

授权协议 Readme
开发语言 PHP
所属分类 Web应用开发、 Web框架
软件类型 开源软件
地区 不详
投 递 者 毕瀚
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Laravel Repositories

Laravel Repositories is a package for Laravel 5 which is used to abstract the database layer. This makes applications much easier to maintain.

Installation

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

Usage

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());
    }
}

Available Methods

The following methods are available:

Bosnadev\Repositories\Contracts\RepositoryInterface
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('*'))
Bosnadev\Repositories\Contracts\CriteriaInterface
public function apply($model, Repository $repository)

Example usage

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

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());
    }
}

Credits

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