daycry / doctrine
适用于Codeigniter 4的Doctrine
v4.1.2
2024-05-17 12:42 UTC
Requires
- php: >=8.2
- beberlei/doctrineextensions: ^1.0
- doctrine/dbal: ^4
- doctrine/orm: ^3
- jms/serializer-bundle: ^4
- symfony/cache: ^7
- symfony/yaml: ^6.2
Requires (Dev)
- codeigniter4/framework: ^4
- friendsofphp/php-cs-fixer: ^3.6
- mikey179/vfsstream: ^1.6
- nexusphp/cs-config: ^3.3
- nexusphp/tachycardia: ^1.0
- phpstan/phpstan: ^1.7.1
- phpunit/phpunit: ^9.1
- rector/rector: 0.18.12
This package is auto-updated.
Last update: 2024-09-21 16:51:41 UTC
README
Doctrine
适用于Codeigniter 4的Doctrine
通过composer安装
使用composer install安装此包
> composer require daycry/doctrine
手动安装
下载此仓库,然后通过编辑 app/Config/Autoload.php 并将 Daycry\Doctrine 命名空间添加到 $psr4 数组中来启用它。例如,如果您将其复制到 app/ThirdParty
$psr4 = [ 'Config' => APPPATH . 'Config', APP_NAMESPACE => APPPATH, 'App' => APPPATH, 'Daycry\Doctrine' => APPPATH .'ThirdParty/doctrine/src', ];
配置
运行命令
> php spark doctrine:publish
此命令将配置文件复制到您的应用命名空间和 doctrine cli 的 "cli-config.php" 文件。然后您可以根据需要调整它。默认文件将位于 app/Config/Doctrine.php
。
使用库
$doctrine = new \Daycry\Doctrine\Doctrine(); $data = $doctrine->em->getRepository( 'App\Models\Entity\Class' )->findOneBy( array( 'id' => 1 ) ); var_dump( $data );
作为服务使用
$doctrine = \Config\Services::doctrine(); $data = $doctrine->em->getRepository( 'App\Models\Entity\Class' )->findOneBy( array( 'id' => 1 ) ); var_dump( $data );
作为助手使用
在您的BaseController - $helpers 数组中添加一个具有您的助手文件名的元素。
protected $helpers = [ 'doctrine_helper' ];
然后,您可以使用该助手
$doctrine = doctrine_instance(); $data = $doctrine->em->getRepository( 'App\Models\Entity\Class' )->findOneBy( array( 'id' => 1 ) ); var_dump( $data );
Cli 命令
//Mapping de database to entities classes php cli-config.php orm:convert-mapping --namespace="App\Models\Entity\" --force --from-database annotation . //Generate getters & setters php cli-config.php orm:generate-entities . //Generate proxy classes php cli-config.php orm:generate-proxies app/Models/Proxies
如果您收到以下错误:语义错误] 类 App\Models\Entity\Secret 中的注解 "@JMS\Serializer\Annotation\ExclusionPolicy" 永远没有被导入。您是否忘记了为此注解添加 "use" 语句?
您必须执行以下命令
composer dump-autoload
使用 DataTables
与 doctrine/orm 一起使用
$datatables = ( new \Daycry\Doctrine\DataTables\Builder() ) ->withColumnAliases( [ 'id' => 'qlu.id' ] ) ->withIndexColumn( 'qlu.id' ) ->withQueryBuilder( $this->doctrine->em->createQueryBuilder() ->select( 'qlu.param, q.param, q.param, qs.id as param, qlu.param, qlu.param' ) ->from( \App\Models\Entity\Class::class, 'qlu' ) ->innerJoin( \App\Models\Entity\Class::class, 'qs', \Doctrine\ORM\Query\Expr\Join::WITH, 'qs.id = qlu.*' ) ->innerJoin( \App\Models\Entity\Class::class, 'ql', \Doctrine\ORM\Query\Expr\Join::WITH, 'ql.id = qlu.*' ) ->innerJoin( \App\Models\Entity\Class::class, 'q', \Doctrine\ORM\Query\Expr\Join::WITH, 'q.id = ql.*' ) ) ->withRequestParams( $this->request->getGet( null ) ); $response = $datatables->getResponse(); echo \json_encode( $response );
如果您收到错误:ResultSetMapping 中没有找到所有标识符属性,您可以使用
->setUseOutputWalkers( false )
示例
$datatables = ( new \Daycry\Doctrine\DataTables\Builder() ) ->withColumnAliases( [ 'id' => 'qlu.id' ] ) ->withIndexColumn( 'qlu.id' ) ->setUseOutputWalkers( false ) ->withQueryBuilder( $this->doctrine->em->createQueryBuilder() ->select( 'qlu.param, q.param, q.param, qs.id as param, qlu.param, qlu.param' ) ->from( \App\Models\Entity\Class::class, 'qlu' ) ->innerJoin( \App\Models\Entity\Class::class, 'qs', \Doctrine\ORM\Query\Expr\Join::WITH, 'qs.id = qlu.*' ) ->innerJoin( \App\Models\Entity\Class::class, 'ql', \Doctrine\ORM\Query\Expr\Join::WITH, 'ql.id = qlu.*' ) ->innerJoin( \App\Models\Entity\Class::class, 'q', \Doctrine\ORM\Query\Expr\Join::WITH, 'q.id = ql.*' ) ) ->withRequestParams( $this->request->getGet( null ) ); $response = $datatables->getResponse(); echo \json_encode( $response );
搜索
从 datatables 中搜索有九种不同的搜索模式
前缀不区分大小写(IN,in,OR,or)。提供的搜索词已被修剪。
示例
public function testDataTableSearchColumnWithOr() { $doctrine = new \Daycry\Doctrine\Doctrine($this->config); $request = \Config\Services::request(); $datatables = ( new \Daycry\Doctrine\DataTables\Builder() ) ->withColumnAliases( [ 'id' => 't.id', 'name' => 't.name' ] ) ->withIndexColumn('qlu.id') ->setUseOutputWalkers(false) ->withCaseInsensitive(false) ->withColumnField('name') ->withQueryBuilder( $doctrine->em->createQueryBuilder() ->select('t.id, t.name') ->from(\Tests\Support\Models\Entities\Test::class, 't') ) ->withRequestParams( array( 'draw' => 1, 'start' => 0, 'length' => 10, 'search' => array('value' => '', 'regex' => true ), 'columns' => array( array( 'data' => 'id', 'name' => 'id', 'searchable' => true, 'orderable' => true, 'search' => array('value' => '[OR]1,3', 'regex' => false) ), array( 'data' => 'name', 'name' => 'name', 'searchable' => true, 'orderable' => true, 'search' => array('value' => '', 'regex' => false) ) ), 'order' => array( array( 'column' => 0, 'dir' => 'asc') ) ) ); echo $response = json_encode($datatables->getResponse()); }