talieutallieu / dry-dbi
此包的最新版本(1.0.10)没有可用的许可信息。
改进DRY数据库
1.0.10
2023-08-24 13:20 UTC
Requires
- tallieutallieu/oak: ^1.0.0
README
改进DRY数据库
索引
安装
composer require tallieutallieu/dry-dbi
用法
定义服务提供者
<?php namespace app\provider; use Repository\PageRepository; use Oak\Contracts\Container\ContainerInterface; use Oak\ServiceProvider; class AppServiceProvider extends ServiceProvider { public function register(ContainerInterface $app) { $app->set(Repository\PageRepository::class, Repository\PageRepository::class); } public function boot(ContainerInterface $app) { // } }
仓库定义
从BaseRepository扩展以实现某些默认行为。
<?php namespace Repository; use Tnt\Dbi\BaseRepository; use Model\Page; class PageRepository extends BaseRepository { protected $model = Page::class; /** * Initial method for default actions */ public function init() { $this->addCriteria( new OrderBy( 'sort_index' ) ); } public function visible() { $this->addCriteria( new IsTrue( 'is_visible' ) ); return $this; } /** * Use querybuilder directly for custom actions */ public function types(array $types) { $this->useQueryBuilder(function(QueryBuilder $queryBuilder) use ($types) { $queryBuilder->whereGroup(function(QueryBuilder $queryBuilder) use ($types) { foreach ($types as $type) { $queryBuilder->where('type', '=', $type->id, 'OR'); } }); }); return $this; } /** * Use querybuilder for table joins (left, right, inner) */ public function expertise(Expertise $expertise) { $this->useQueryBuilder(function(QueryBuilder $queryBuilder) { $queryBuilder->leftJoin('project_expertise')->on('project', '=', 'project.id'); }); return $this; } }
使用仓库
<?php namespace Controller; use app\container\Application; class pages { public static function get(Request $request) { $app = Application::get(); $pageRepository = $app->get(PageRepository::class); $visiblePages = $pageRepository->visible()->get(); } }