PluginProbe
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses / 2.10.0
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses v2.10.0
2.10.0 2.10.01 2.9.1 2.9.0 2.8.1 2.8.0 2.7.7 2.7.5 2.7.0 2.6.01 2.6.0 2.5.0 2.4.01 trunk 1.0.90 1.0.91 1.0.92 1.0.93 1.0.94 1.0.95 1.0.96 1.0.97 1.0.98 1.0.99 1.1.0 All 77 releases
fluent-community / vendor / wpfluent / framework / src / WPFluent / Database / Query / JoinClause.php

JoinClause.php in FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses 2.10.0, at vendor/wpfluent/framework/src/WPFluent/Database/Query/JoinClause.php

151 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentCommunity\Framework\Database\Query;
4
5 use Closure;
6
7 class JoinClause extends Builder
8 {
9 /**
10 * The type of join being performed.
11 *
12 * @var string
13 */
14 public $type;
15
16 /**
17 * The table the join clause is joining to.
18 *
19 * @var string
20 */
21 public $table;
22
23 /**
24 * The connection of the parent query builder.
25 *
26 * @var \FluentCommunity\Framework\Database\ConnectionInterface
27 */
28 protected $parentConnection;
29
30 /**
31 * The grammar of the parent query builder.
32 *
33 * @var \FluentCommunity\Framework\Database\Query\Grammars\Grammar
34 */
35 protected $parentGrammar;
36
37 /**
38 * The processor of the parent query builder.
39 *
40 * @var \FluentCommunity\Framework\Database\Query\Processors\Processor
41 */
42 protected $parentProcessor;
43
44 /**
45 * The class name of the parent query builder.
46 *
47 * @var string
48 */
49 protected $parentClass;
50
51 /**
52 * Create a new join clause instance.
53 *
54 * @param \FluentCommunity\Framework\Database\Query\Builder $parentQuery
55 * @param string $type
56 * @param string $table
57 * @return void
58 */
59 public function __construct(Builder $parentQuery, $type, $table)
60 {
61 $this->type = $type;
62 $this->table = $table;
63 $this->parentClass = get_class($parentQuery);
64 $this->parentGrammar = $parentQuery->getGrammar();
65 $this->parentProcessor = $parentQuery->getProcessor();
66 $this->parentConnection = $parentQuery->getConnection();
67
68 parent::__construct(
69 $this->parentConnection, $this->parentGrammar, $this->parentProcessor
70 );
71 }
72
73 /**
74 * Add an "on" clause to the join.
75 *
76 * On clauses can be chained, e.g.
77 *
78 * $join->on('contacts.user_id', '=', 'users.id')
79 * ->on('contacts.info_id', '=', 'info.id')
80 *
81 * will produce the following SQL:
82 *
83 * on `contacts`.`user_id` = `users`.`id` and `contacts`.`info_id` = `info`.`id`
84 *
85 * @param \Closure|string $first
86 * @param string|null $operator
87 * @param \FluentCommunity\Framework\Database\Query\Expression|string|null $second
88 * @param string $boolean
89 * @return self
90 *
91 * @throws \InvalidArgumentException
92 */
93 public function on($first, $operator = null, $second = null, $boolean = 'and')
94 {
95 if ($first instanceof Closure) {
96 return $this->whereNested($first, $boolean);
97 }
98
99 return $this->whereColumn($first, $operator, $second, $boolean);
100 }
101
102 /**
103 * Add an "or on" clause to the join.
104 *
105 * @param \Closure|string $first
106 * @param string|null $operator
107 * @param \FluentCommunity\Framework\Database\Query\Expression|string|null $second
108 * @return \FluentCommunity\Framework\Database\Query\JoinClause
109 */
110 public function orOn($first, $operator = null, $second = null)
111 {
112 return $this->on($first, $operator, $second, 'or');
113 }
114
115 /**
116 * Get a new instance of the join clause builder.
117 *
118 * @return \FluentCommunity\Framework\Database\Query\JoinClause
119 */
120 public function newQuery()
121 {
122 return new static($this->newParentQuery(), $this->type, $this->table);
123 }
124
125 /**
126 * Create a new query instance for sub-query.
127 *
128 * @return \FluentCommunity\Framework\Database\Query\Builder
129 */
130 protected function forSubQuery()
131 {
132 return $this->newParentQuery()->newQuery();
133 }
134
135 /**
136 * Create a new parent query instance.
137 *
138 * @return \FluentCommunity\Framework\Database\Query\Builder
139 */
140 protected function newParentQuery()
141 {
142 $class = $this->parentClass;
143
144 return new $class(
145 $this->parentConnection,
146 $this->parentGrammar,
147 $this->parentProcessor
148 );
149 }
150 }
151