svensp/laravel-thin-repository

用于在获取/查找时添加和遗忘条件的仓库特性

2.0.0 2020-09-10 16:00 UTC

This package is auto-updated.

Last update: 2024-09-11 01:21:12 UTC


README

thin repository尝试将Laravel Eloquent querybuilder中发现的美丽链式条件扩展到该模型的仓库。

更新

  • 1.0.0 -> 2.0.0: condition和advancedCondition函数不再以默认值作为名称参数,而是返回一个ElementRenamer,允许通过named方法指定名称。
    示例:$this->condition(function() {})->named('user');

安装

laravel thin repository通过composer安装

composer install svensp/laravel-thin-repository

使用

laravel thin repository的核心是ThinRepository特性。它将为你的仓库提供以下方法

  • public find() - 带当前条件的findOrFail
  • public get() - 带当前条件的get
  • protected condition(Closure $condition, string $name = null) - 通过lambda函数设置条件
  • protected advancedCondition(Condition $condition, string $name = null) - 通过实现Condition接口的对象设置条件

除非指定名称,否则条件将堆叠。具有相同名称的条件将相互覆盖。

<?php

/**
 * An example Repository using the ThinRepository trait to do its work
 **/
class ExampleRepository {
  use ThinRepository\ThinRepository;

  protected $modelClassPath = ExampleModel::class;

  public function forUser($userId)
  {
    $this->condition(function($builder) use ($userId) {
      $builder->where('user_id', $userId);
    });
    return $this;
  }

}

$example = app(ExampleRepository::class)->forUser(5)->find();
$examples = app(ExampleRepository::class)->forUser(5)->get();