PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 2.19.6
GiveWP – Donation Plugin and Fundraising Platform v2.19.6
4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 All 253 releases
give / src / Framework / Models / ModelQueryBuilder.php

ModelQueryBuilder.php in GiveWP – Donation Plugin and Fundraising Platform 2.19.6, at src/Framework/Models/ModelQueryBuilder.php

117 lines 2.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\Framework\Models;
4
5 use Give\Framework\Database\DB;
6 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
7 use Give\Framework\Models\Contracts\ModelCrud;
8 use Give\Framework\QueryBuilder\QueryBuilder;
9
10 /**
11 * @since 2.19.6
12 *
13 * @template M
14 */
15 class ModelQueryBuilder extends QueryBuilder
16 {
17 /**
18 * @var class-string<M>
19 */
20 protected $model;
21
22 /**
23 * @param class-string<M> $modelClass
24 */
25 public function __construct($modelClass)
26 {
27 if (!is_subclass_of($modelClass, Model::class)) {
28 throw new InvalidArgumentException("$modelClass must be an instance of " . Model::class);
29 }
30
31 $this->model = $modelClass;
32 }
33
34 /**
35 * Get row
36 *
37 * @since 2.19.6
38 *
39 * @return M|null
40 */
41 public function get($output = OBJECT)
42 {
43 $row = DB::get_row($this->getSQL(), OBJECT);
44
45 if (!$row) {
46 return null;
47 }
48
49 return $this->getRowAsModel($row);
50 }
51
52 /**
53 * Get results
54 *
55 * @since 2.19.6
56 *
57 * @return M[]|null
58 */
59 public function getAll($output = OBJECT)
60 {
61 $results = DB::get_results($this->getSQL(), OBJECT);
62
63 if (!$results) {
64 return null;
65 }
66
67 if (isset($this->model)) {
68 return $this->getAllAsModel($results);
69 }
70
71 return $results;
72 }
73
74 /**
75 * Get row as model
76 *
77 * @since 2.19.6
78 *
79 * @param object|null $row
80 *
81 * @return M|null
82 */
83 protected function getRowAsModel($row)
84 {
85 $model = $this->model;
86
87 if (!method_exists($model, 'fromQueryBuilderObject')) {
88 throw new InvalidArgumentException("fromQueryBuilderObject missing from $model");
89 }
90
91 return $model::fromQueryBuilderObject($row);
92 }
93
94 /**
95 * Get results as models
96 *
97 * @since 2.19.6
98 *
99 * @param object[] $results
100 *
101 * @return M[]|null
102 */
103 protected function getAllAsModel($results)
104 {
105 /** @var ModelCrud $model */
106 $model = $this->model;
107
108 if (!method_exists($model, 'fromQueryBuilderObject')) {
109 throw new InvalidArgumentException("fromQueryBuilderObject missing from $model");
110 }
111
112 return array_map(static function ($object) use ($model) {
113 return $model::fromQueryBuilderObject($object);
114 }, $results);
115 }
116 }
117