Passed
Branch master (60c939)
by RN
13:55 queued 01:23
created

Save::createQuery()   B

Complexity

Conditions 7
Paths 5

Size

Total Lines 25
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 7
eloc 18
c 1
b 1
f 0
nc 5
nop 1
dl 0
loc 25
rs 8.8333
1
<?php
2
/**
3
 * The Query builder API.
4
 *
5
 * @author RN Kushwaha <[email protected]>
6
 * @since v0.0.1 <Date: 12th April, 2019>
7
 */
8
9
namespace Dolphin\Mapper;
10
11
use Dolphin\Builders\QueryBuilder;
12
use Dolphin\Connections\Connection;
13
use Dolphin\Utils\Utils;
14
use Exception;
15
16
class Save extends Dolphin
17
{
18
    private $qb;
19
20
    public function __construct()
21
    {
22
        $this->qb = new QueryBuilder();
23
    }
24
25
    public function createQuery($row){
26
        $ar = [];
27
        if(isset($row) && isset($row->id) && $row->id > 0 ){
28
            $query = "UPDATE ".$this->table()." SET ";
29
            foreach($row as $key => $val){
30
                $ar[':'.$key] = $val;
31
                if($key == 'id') continue;
32
                $query.= $this->qb->quote($key)." =:".$key.",";
33
            }
34
35
            $query = rtrim($query, ",");
36
            $query.= " WHERE ".$this->qb->quote('id')."=:id";
37
        } else{
38
            $queryVal = '';
39
            $query = "INSERT INTO ".$this->table()." (";
40
            foreach($row as $key => $val){
41
                $query.= $this->qb->quote($key).", ";
42
                $ar[$key] = $val;
43
                $queryVal.= ":".$key.", ";
44
            }
45
46
            $query = rtrim($query, ", ").") VALUES (".$queryVal.rtrim($query, ", ").") ";
47
        }
48
49
        return ['query' => $query, 'data' => $ar];
50
    }
51
52
    /**
53
     * It saves the row by primary key [id]
54
     * Or inserts a new row if id is null
55
     * 
56
     * @param object $object
57
     * @return boolean
58
     * @throws Exception
59
     * @author RN Kushwaha <[email protected]>
60
     * @since v0.0.5 
61
     */
62
    public function save($object)
63
    {
64
        $qb = new QueryBuilder();
65
        $util = new Utils();
66
        $row = $util->turnObject($this->tableName, $object);
67
68
        list($query, $data) = $this->createQuery($row);
69
70
        try{
71
            $stmt = Connection::get()->prepare($qb->queryPrefix($query));
72
            $stmt->execute($data);
73
        } catch(Exception $e){
74
            throw new Exception($e->getMessage());
75
        }
76
77
        return true;
78
    }
79
    
80
}
81
82