Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0c99526

Browse files
created Repository, BugReportRepository entity
1 parent 2fe68f6 commit 0c99526

File tree

4 files changed

+116
-4
lines changed

4 files changed

+116
-4
lines changed
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
<?php
2-
3-
42
namespace App\Contracts;
53

4+
use App\Entity\Entity;
65

76
interface RepositoryInterface
87
{
9-
8+
public function find(int $id): ?object;
9+
public function findOneBy(string $field, $value): ?object;
10+
public function findBy(array $criteria);
11+
public function findAll(int $id): array;
12+
public function sql(string $query);
13+
public function create(Entity $entity): object;
14+
public function update(Entity $entity, array $conditions = []): object;
15+
public function delete(Entity $entity, array $conditions = []): void;
1016
}

‎src/Entity/Entity.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1+
<?php
22

33
namespace App\Entity;
44

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
4+
namespace App\Repository;
5+
6+
7+
use App\Entity\BugReport;
8+
9+
class BugReportRepository extends Repository
10+
{
11+
protected static $table = 'reports';
12+
protected static $classname = BugReport::class;
13+
14+
}

‎src/Repository/Repository.php‎

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<?php
2+
3+
namespace App\Repository;
4+
5+
use App\Contracts\RepositoryInterface;
6+
use App\Database\QueryBuilder;
7+
use App\Entity\Entity;
8+
9+
abstract class Repository implements RepositoryInterface
10+
{
11+
12+
protected static $table;
13+
protected static $className;
14+
15+
/** @var QueryBuilder $queryBuilder */
16+
private $queryBuilder;
17+
18+
19+
public function __construct(QueryBuilder $queryBuilder)
20+
{
21+
$this->queryBuilder = $queryBuilder;
22+
}
23+
24+
25+
public function find(int $id): ?object
26+
{
27+
return $this->findOneBy('id', $id);
28+
}
29+
30+
31+
public function findOneBy(string $field, $value): ?object
32+
{
33+
$result = $this->queryBuilder->table(static::$table)
34+
->select()->where($field, $value)->runQuery()
35+
->fetchInto(static::$className);
36+
37+
return ($result) ? $result[0] : null;
38+
}
39+
40+
41+
public function findBy(array $criteria)
42+
{
43+
$this->queryBuilder->table(static::$table);
44+
foreach ($criteria as $criter)
45+
{
46+
$this->queryBuilder->where(...$criter); //$criter is an array or arrases
47+
}
48+
return $this->queryBuilder->runQuery()->fetchInto(static::$className);
49+
}
50+
51+
52+
public function findAll(int $id): array
53+
{
54+
return $this->queryBuilder->table(static::$table)
55+
->select()->runQuery()->fetchInto(static::$className);
56+
}
57+
58+
59+
public function sql(string $query)
60+
{
61+
return $this->queryBuilder->raw($query)->fetchInto(static::$className);
62+
}
63+
64+
65+
public function create(Entity $entity): object
66+
{
67+
$id = $this->queryBuilder->table(static::$table)->create($entity->toArray());
68+
return $this->find($id);
69+
}
70+
71+
public function update(Entity $entity, array $conditions = []): object
72+
{
73+
$this->queryBuilder->table(static::$table)->update($entity->toArray());
74+
foreach ($conditions as $condition)
75+
{
76+
$this->queryBuilder->where(...$condition);
77+
}
78+
$this->queryBuilder->where('id', $entity->getId())->runQuery();
79+
return $this->find($entity->getId());
80+
}
81+
82+
83+
public function delete(Entity $entity, array $conditions = []): void
84+
{
85+
$this->queryBuilder->table(static::$table)->delete($entity->toArray());
86+
foreach ($conditions as $condition)
87+
{
88+
$this->queryBuilder->where(...$condition);
89+
}
90+
$this->queryBuilder->where('id', $entity->getId())->runQuery();
91+
}
92+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /