PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.23.2
GiveWP – Donation Plugin and Fundraising Platform v2.23.2
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 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Framework / QueryBuilder / Concerns / MetaQuery.php
give / src / Framework / QueryBuilder / Concerns Last commit date
Aggregate.php 4 years ago CRUD.php 4 years ago FromClause.php 4 years ago GroupByStatement.php 4 years ago HavingClause.php 4 years ago JoinClause.php 4 years ago LimitStatement.php 4 years ago MetaQuery.php 4 years ago OffsetStatement.php 4 years ago OrderByStatement.php 4 years ago SelectStatement.php 4 years ago TablePrefix.php 4 years ago UnionOperator.php 4 years ago WhereClause.php 3 years ago
MetaQuery.php
140 lines
1 <?php
2
3 namespace Give\Framework\QueryBuilder\Concerns;
4
5 use Give\Framework\QueryBuilder\Clauses\MetaTable;
6 use Give\Framework\QueryBuilder\Clauses\RawSQL;
7 use Give\Framework\QueryBuilder\JoinQueryBuilder;
8 use Give\Framework\QueryBuilder\QueryBuilder;
9
10 /**
11 * @since 2.19.0
12 */
13 trait MetaQuery
14 {
15
16 /**
17 * @var MetaTable[]
18 */
19 private $metaTablesConfigs = [];
20
21 /**
22 * @var string
23 */
24 private $defaultMetaKeyColumn = 'meta_key';
25
26 /**
27 * @var string
28 */
29 private $defaultMetaValueColumn = 'meta_value';
30
31 /**
32 * @param string|RawSQL $table
33 * @param string $metaKeyColumn
34 * @param string $metaValueColumn
35 *
36 * @return $this
37 */
38 public function configureMetaTable($table, $metaKeyColumn, $metaValueColumn)
39 {
40 $this->metaTablesConfigs[] = new MetaTable(
41 $table,
42 $metaKeyColumn,
43 $metaValueColumn
44 );
45
46 return $this;
47 }
48
49 /**
50 * @param string|RawSQL $table
51 *
52 * @return MetaTable
53 */
54 protected function getMetaTable($table)
55 {
56 $tableName = QueryBuilder::prefixTable($table);
57
58 foreach ($this->metaTablesConfigs as $metaTable) {
59 if ($metaTable->tableName === $tableName) {
60 return $metaTable;
61 }
62 }
63
64 return new MetaTable(
65 $table,
66 $this->defaultMetaKeyColumn,
67 $this->defaultMetaValueColumn
68 );
69 }
70
71 /**
72 * Select meta columns
73 *
74 * @since 2.21.1 optimize group concat functionality
75 * @since 2.19.6 add group concat functionality
76 * @since 2.19.0
77 *
78 * @param string|RawSQL $table
79 * @param string $foreignKey
80 * @param string $primaryKey
81 * @param array $columns
82 *
83 * @return $this
84 */
85 public function attachMeta($table, $foreignKey, $primaryKey, ...$columns)
86 {
87 $metaTable = $this->getMetaTable($table);
88
89 foreach ($columns as $i => $definition) {
90 if (is_array($definition)) {
91 list ($column, $columnAlias, $concat) = array_pad($definition, 3, false);
92 } else {
93 $column = $definition;
94 $columnAlias = $concat = false;
95 }
96
97 // Set dynamic alias
98 $tableAlias = sprintf('%s_%s_%d', ($table instanceof RawSQL) ? $table->sql : $table, 'attach_meta', $i);
99
100 // Check if we have meta columns that dev wants to group concat
101 if ($concat) {
102 /**
103 * Include foreign key to prevent errors if sql_mode is only_full_group_by
104 *
105 * @see https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
106 */
107 $this->groupBy($foreignKey);
108
109 // Group concat same key values into faux array
110 // @example key => ["value1", "value2"]
111 $this->selectRaw(
112 "CONCAT('[',GROUP_CONCAT(DISTINCT CONCAT('\"',%1s,'\"')),']') AS %2s",
113 $tableAlias . '.' . $metaTable->valueColumnName,
114 $columnAlias ?: $column
115 );
116 } else {
117 $this->select(["{$tableAlias}.{$metaTable->valueColumnName}", $columnAlias ?: $column]);
118 }
119
120 $this->join(
121 function (JoinQueryBuilder $builder) use (
122 $table,
123 $foreignKey,
124 $primaryKey,
125 $tableAlias,
126 $column,
127 $metaTable
128 ) {
129 $builder
130 ->leftJoin($table, $tableAlias)
131 ->on($foreignKey, "{$tableAlias}.{$primaryKey}")
132 ->andOn("{$tableAlias}.{$metaTable->keyColumnName}", $column, true);
133 }
134 );
135 }
136
137 return $this;
138 }
139 }
140