Passed
Push — master ( 2f76b9...67ec7f )
by Aleksandr
56:58 queued 21:55
created

Model::getNativeConnection()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * This file is part of the eav package.
4
 * @author    Alex Kuperwood <[email protected]>
5
 * @copyright 2025 Alex Kuperwood
6
 * @license   https://opensource.org/license/mit  The MIT License
7
 */
8
declare(strict_types=1);
9
10
namespace Kuperwood\Eav\Model;
11
12
use Kuperwood\Eav\Database\Connection;
13
use PDO;
14
15
class Model
16
{
17
    protected string $primaryKey = 'id';
18
19
    protected string $table;
20
21
    public function db() : PDO
22 1
    {
23
        return Connection::get();
24 1
    }
25
26
    public function setPrimaryKey(string $name): void
27
    {
28
        $this->primaryKey = $name;
29
    }
30
31
    public function getPrimaryKey(): string
32 1
    {
33
        return $this->primaryKey;
34 1
    }
35
36
    public function setTable(string $table): void
37 1
    {
38
        $this->table = $table;
39 1
    }
40
41
    public function getTable() : string
42 1
    {
43
        return $this->table;
44 1
    }
45
46
    public function insert(array $data): int
47 1
    {
48
        $conn = $this->db();
49 1
        $table = $this->getTable();
50
51
        // Extract the column names and values from the data array
52 1
        $columns = implode(', ', array_keys($data));
53
        $placeholders = ':' . implode(', :', array_keys($data));
54 1
55 1
        // Prepare the SQL statement
56
        $stmt = $conn->prepare("INSERT INTO $table ($columns) VALUES ($placeholders)");
57
        // Bind the values from the $data array to the prepared statement
58 1
        foreach ($data as $key => $value) {
59 1
            $stmt->bindValue(':' . $key, $value);
60
        }
61
        $stmt->execute();
62 1
63
        return (int) $conn->lastInsertId();
64 1
    }
65 1
66
    public function updateByArray(int $key, array $data) : bool
67 1
    {
68
        $keyName = $this->getPrimaryKey();
69 1
70
        $conn = $this->db();
71
        $table = $this->getTable();
72 1
73
        $setValues = [];
74 1
        foreach (array_keys($data) as $column) {
75
            $setValues[] = "$column = :$column";
76 1
        }
77 1
        $setValues = implode(", ", $setValues);
78
79 1
        $stmt = $conn->prepare("UPDATE $table SET $setValues WHERE $keyName = :key");
80 1
81 1
        foreach ($data as $k => $value) {
82
            $stmt->bindValue($k, $value);
83 1
        }
84
85 1
        $binds = array_merge($data, ['key' => $key]);
86
        return $stmt->execute($binds);
87 1
    }
88 1
89
    public function deleteByKey(int $key): bool
90
    {
91 1
        $keyName = $this->getPrimaryKey();
92 1
93
        $conn = $this->db();
94
        $table = $this->getTable();
95 1
96
        $stmt = $conn->prepare("DELETE FROM $table WHERE $keyName = :key");
97 1
        $stmt->bindValue(':key',  $key, PDO::PARAM_INT);
98
99 1
        return $stmt->execute();
100 1
    }
101
102 1
    public function count() : int
103 1
    {
104
        $table = $this->getTable();
105 1
        $stmt = $this->db()->prepare("SELECT COUNT(*) as count FROM $table");
106
        $stmt->execute();
107
        $record = $stmt->fetch(PDO::FETCH_ASSOC);
108 1
        return (int) $record["count"];
109
    }
110 1
111 1
    public function findByKey(int $key)
112 1
    {
113 1
        $conn = $this->db();
114 1
        $sql = sprintf("SELECT * FROM %s WHERE %s = ?", $this->getTable(), $this->getPrimaryKey());
115
        $stmt = $conn->prepare($sql);
116
        $stmt->execute([$key]);
117 1
        return $stmt->fetch(PDO::FETCH_ASSOC);
118
    }
119
}