Skip to content
This repository was archived by the owner on Jul 27, 2020. It is now read-only.

Commit 2e54d66

Browse files
committed
- adjust in the setEntityValuesArray method
- command to generate doctrine entities
1 parent 8a717e5 commit 2e54d66

File tree

5 files changed

+123
-23
lines changed

5 files changed

+123
-23
lines changed

README.md

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,8 @@ php artisan vendor:publish --tag="configRepository"
7878
3- Generate the entities
7979

8080

81-
Step 1:
82-
83-
```bash
84-
php artisan doctrine:convert:mapping --force --from-database annotation app/Entities
85-
```
86-
87-
Step 2:
88-
8981
```bash
90-
php artisan doctrine:generate:entities --generate-annotations --generate-methods --update-entities app/Entities
82+
php artisan make:doctrine-repository:entities
9183
```
9284

9385
4- Generate repository file.
@@ -179,7 +171,7 @@ class UserDocRepository extends DoctrineBaseRepository implements UserRepository
179171
{
180172
return $this->setCreateArray([
181173
'fieldTest1',
182-
'fieldTest2:fk', //foreign key
174+
'fieldTest2:fk=classNameFk', //foreign key
183175
], $params);
184176
}
185177

@@ -196,7 +188,7 @@ class UserDocRepository extends DoctrineBaseRepository implements UserRepository
196188
{
197189
return $this->setUpdateArray([
198190
'fieldTest1',
199-
'fieldTest2:fk', //foreign key
191+
'fieldTest2:fk=classNameFk', //foreign key
200192
], $params, $id);
201193
}
202194

@@ -651,7 +643,7 @@ public function create(array $params): object
651643
return $this->setCreateArray([
652644
'firstName',
653645
'lastName',
654-
'userGenre:fk', //foreign key
646+
'userGenre:fk=UserGenre', //foreign key
655647
], $params);
656648
}
657649
```
@@ -672,7 +664,7 @@ public function create(array $params): object
672664
return $this->setCreateArray([
673665
'firstName',
674666
'lastName',
675-
'userGenre:fk', //foreign key
667+
'userGenre:fk=UserGenre', //foreign key
676668
], $params, false);
677669
}
678670
```
@@ -694,14 +686,14 @@ public function create(array $params): object
694686
return $this->setCreateArray([
695687
'firstName',
696688
'lastName',
697-
'userGenre:fk', //foreign key
689+
'userGenre:fk=UserGenre', //foreign key
698690
], $params, true, 'included', ['firstName','lastName']);
699691

700692
//Ex 2: The return object will not return the firstName and lastName fields
701693
return $this->setCreateArray([
702694
'firstName',
703695
'lastName',
704-
'userGenre:fk', //foreign key
696+
'userGenre:fk=UserGenre', //foreign key
705697
], $params, true, 'excluded', ['firstName','lastName']);
706698
}
707699
```
@@ -756,7 +748,7 @@ public function update(array $params, int $id): object
756748
return $this->setUpdateArray([
757749
'firstName',
758750
'lastName',
759-
'userGenre:fk', //foreign key
751+
'userGenre:fk=UserGenre', //foreign key
760752
], $params, $id);
761753
}
762754
```
@@ -778,7 +770,7 @@ public function update(array $params, int $id): object
778770
return $this->setUpdateArray([
779771
'firstName',
780772
'lastName',
781-
'userGenre:fk', //foreign key
773+
'userGenre:fk=UserGenre', //foreign key
782774
], $params, $id, false);
783775
}
784776
```
@@ -801,14 +793,14 @@ public function update(array $params, int $id): object
801793
return $this->setUpdateArray([
802794
'firstName',
803795
'lastName',
804-
'userGenre:fk', //foreign key
796+
'userGenre:fk=UserGenre', //foreign key
805797
], $params, $id, true, 'included', ['firstName','lastName']);
806798

807799
//Ex 2: The return object will not return the firstName and lastName fields
808800
return $this->setUpdateArray([
809801
'firstName',
810802
'lastName',
811-
'userGenre:fk', //foreign key
803+
'userGenre:fk=UserGenre', //foreign key
812804
], $params, $id, true, 'excluded', ['firstName','lastName']);
813805
}
814806
```

src/Console/CreateEntitiesCommand.php

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<?php
2+
3+
/**
4+
* This file is part of the Laravel Doctrine Repository package.
5+
*
6+
* @see http://github.com/fernandozueet/laravel-doctrine-repository
7+
*
8+
* @copyright 2018
9+
* @license MIT License
10+
* @author Fernando Zueet <fernandozueet@hotmail.com>
11+
*/
12+
13+
namespace Ldr\Console;
14+
15+
use Illuminate\Console\Command;
16+
use Doctrine\ORM\Tools\EntityGenerator;
17+
use Doctrine\ORM\Mapping\Driver\DatabaseDriver;
18+
use Doctrine\ORM\Tools\DisconnectedClassMetadataFactory;
19+
20+
class CreateEntitiesCommand extends Command
21+
{
22+
/**
23+
* The name and signature of the console command.
24+
*
25+
* @var string
26+
*/
27+
protected $signature = 'make:doctrine-repository:entities';
28+
29+
/**
30+
* The console command description.
31+
*
32+
* @var string
33+
*/
34+
protected $description = 'Generate doctrine entities';
35+
36+
/**
37+
* Create a new command instance.
38+
*/
39+
public function __construct()
40+
{
41+
parent::__construct();
42+
}
43+
44+
/**
45+
* Execute the console command.
46+
*
47+
* @return mixed
48+
*/
49+
public function handle()
50+
{
51+
$dbName = $this->ask('Name of the connection to the database? value default: (default)') ?? 'default';
52+
53+
$namespace = config('doctrine.managers')[$dbName]['LdrConfig']['namespaceEntities'].'\\' ?? 'App\\Entities\\';
54+
$dirName = str_replace('\\', '/', $namespace);
55+
56+
$em = app('registry')->getManager($dbName);
57+
58+
//delete files
59+
$files = glob(__DIR__.'/../../../../../'.$dirName.'*');
60+
if (count($files) > 0) {
61+
foreach ($files as $file) {
62+
if (is_file($file)) {
63+
unlink($file);
64+
}
65+
}
66+
}
67+
68+
//custom datatypes (not mapped for reverse engineering)
69+
$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('set', 'string');
70+
$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
71+
$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('json', 'json_array');
72+
73+
//fetch metadata
74+
$driver = new DatabaseDriver(
75+
$em->getConnection()->getSchemaManager()
76+
);
77+
$driver->setNamespace($namespace);
78+
$em->getConfiguration()->setMetadataDriverImpl($driver);
79+
$cmf = new DisconnectedClassMetadataFactory($em);
80+
$cmf->setEntityManager($em);
81+
$classes = $driver->getAllClassNames();
82+
$metadata = $cmf->getAllMetadata();
83+
84+
$generator = new EntityGenerator();
85+
$generator->setUpdateEntityIfExists(true);
86+
$generator->setGenerateStubMethods(true);
87+
$generator->setGenerateAnnotations(true);
88+
$generator->generate($metadata, __DIR__.'/../../../../../');
89+
90+
$this->line('Successfully generated entities!');
91+
}
92+
}

src/Console/Stubs/baseRepository.stub

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class {{nameclass}} extends DoctrineBaseRepository {{interface}}
5959
{
6060
return $this->setCreateArray([
6161
'fieldTest1',
62-
'fieldTest2:fk', //foreign key
62+
'fieldTest2:fk=classNameFk', //foreign key
6363
], $params);
6464
}
6565

@@ -76,7 +76,7 @@ class {{nameclass}} extends DoctrineBaseRepository {{interface}}
7676
{
7777
return $this->setUpdateArray([
7878
'fieldTest1',
79-
'fieldTest2:fk', //foreign key
79+
'fieldTest2:fk=classNameFk', //foreign key
8080
], $params, $id);
8181
}
8282

src/Core/DoctrineBaseRepository.php

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ private function setEntityValuesArray($entity, array $rule, array $params, $crea
547547
{
548548
$set = true;
549549
$fk = false;
550-
550+
$fk2 = false;
551551
if ($createdAt) {
552552
$setcreatedAt = ucfirst($this->configLdr['createdAtFieldName']);
553553
$setcreatedAt = "set$setcreatedAt";
@@ -561,8 +561,19 @@ private function setEntityValuesArray($entity, array $rule, array $params, $crea
561561
foreach ($rule as $key => $value) {
562562
$exp = explode('|', $value);
563563
$fkP = explode(':', $exp[0]);
564+
564565
$field = $exp[0];
565566

567+
//foreign key
568+
if (isset($fkP[1])) {
569+
$fkPExp = explode('=', $fkP[1]);
570+
$fk2 = true;
571+
$field = $fkP[0];
572+
if (array_search(ucfirst($fkPExp[1]), $this->fkNames) === false) {
573+
throw new \Exception('Incorrect foreign key name');
574+
}
575+
}
576+
566577
//foreign key
567578
if (count($fkP) == 2 && $fkP[1] == 'fk') {
568579
$fk = true;
@@ -575,7 +586,6 @@ private function setEntityValuesArray($entity, array $rule, array $params, $crea
575586
//mount method set
576587
$nameSet = ucfirst($field);
577588
$nameSet = "set{$nameSet}";
578-
579589
if (isset($params[$field])) {
580590
$set = true;
581591
} else {
@@ -588,8 +598,12 @@ private function setEntityValuesArray($entity, array $rule, array $params, $crea
588598
if ($fk) {
589599
$value = $this->getReference($this->ent->{ucfirst($fkP[0])}, $value);
590600
}
601+
if ($fk2) {
602+
$value = $this->getReference($this->ent->{ucfirst($fkPExp[1])}, $value);
603+
}
591604
$entity->{$nameSet}($value);
592605
$fk = false;
606+
$fk2 = false;
593607
}
594608
}
595609

src/Core/DoctrineServiceProvider.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
use LaravelDoctrine\ORM\Console\EnsureProductionSettingsCommand;
4949
use LaravelDoctrine\ORM\Configuration\Connections\ConnectionManager;
5050
use Ldr\Console\MakeDoctrineRepositoryCommand;
51+
use Ldr\Console\CreateEntitiesCommand;
5152

5253
class DoctrineRepositoryServiceProvider extends ServiceProvider
5354
{
@@ -372,6 +373,7 @@ protected function registerConsoleCommands()
372373
ConvertMappingCommand::class,
373374
DumpDatabaseCommand::class,
374375
MakeDoctrineRepositoryCommand::class,
376+
CreateEntitiesCommand::class,
375377
]);
376378
}
377379

0 commit comments

Comments
 (0)