Skip to content

Commit 7cec598

Browse files
author
Fredrick Peter
committed
Using Join with Clauses Error Fixed.
1 parent 60f764e commit 7cec598

File tree

3 files changed

+65
-18
lines changed

3 files changed

+65
-18
lines changed

README.md

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ Prior to installing `php-orm-database` get the [Composer](https://getcomposer.or
110110
**Step 1** — update your `composer.json`:
111111
```composer.json
112112
"require": {
113-
"peterson/php-orm-database": "^4.1.2"
113+
"peterson/php-orm-database": "^4.1.3"
114114
}
115115
```
116116

@@ -853,14 +853,14 @@ SELECT *
853853
</details>
854854

855855
### join
856-
<details><summary>Read more...</summary>
857856

858857
| Params | Description |
859858
|---------------|-------------------|
860859
| table | table |
861860
| foreignColumn | table.column |
862861
| operator | operator sign |
863-
| localColumn | local_table.column |
862+
| localColumn | local_table.column|
863+
864864
```
865865
$db->table('wallet')
866866
->join('users', 'users.user_id', '=', 'wallet.user_id')
@@ -871,22 +871,33 @@ SELECT *
871871
FROM `wallet`
872872
INNER JOIN `users` ON users.user_id = wallet.user_id
873873
```
874-
</details>
875874

876-
### leftJoin
877-
<details><summary>Read more...</summary>
875+
- or
876+
- When using clauses, Make sure `join`|`leftJoin` comes first, Before the clauses
877+
```
878+
$db->table('wallet')
879+
->join('users', 'users.user_id', '=', 'wallet.user_id')
880+
->where('wallet.email', 'example.com')
881+
->orWhere('wallet.user_id', 10000001)
882+
->paginate(10);
883+
884+
-- Query
885+
SELECT *
886+
FROM `wallet`
887+
INNER JOIN `users` ON users.user_id = wallet.user_id
888+
WHERE wallet.email =:email OR wallet.user_id =:user_id
889+
LIMIT 0, 10
890+
```
878891

892+
### leftJoin
879893
- Same as `join`
894+
880895
```
881896
$db->table('wallet')
882897
->leftJoin('users', 'users.user_id', '=', 'wallet.user_id')
898+
->where('wallet.email', 'example.com')
883899
->get();
884-
885-
SELECT *
886-
FROM `wallet`
887-
LEFT JOIN `users` ON users.user_id = wallet.user_id
888900
```
889-
</details>
890901

891902
### where
892903
- Takes three parameter

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
},
3939
"extra": {
4040
"branch-alias": {
41-
"dev-main": "4.1.2-dev"
41+
"dev-main": "4.1.3-dev"
4242
}
4343
},
4444
"minimum-stability": "stable",

src/Query/Builder.php

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -233,23 +233,24 @@ public function where($column, $operator = null, $value = null)
233233
$temp = $this->console::configWhereClauseOperator($operator, $value);
234234
$value = $temp['value'];
235235
$operator = $temp['operator'];
236+
$query = $this->whereAndOrWhereQuery($column, $operator);
236237

237238
// if query already exists
238239
if($this->isWhereExist()){
239240
$this->where[] = [
240-
'query' => " AND {$column}{$operator}:{$column}",
241+
'query' => " AND {$query['query']}",
241242
'data' => [
242-
'column' => $column,
243+
'column' => $query['column'],
243244
'operator' => $operator,
244245
'value' => $value,
245246
]
246247
];
247248
}else{
248249
// first query
249250
$this->where[] = [
250-
'query' => " WHERE {$column}{$operator}:{$column}",
251+
'query' => " WHERE {$query['query']}",
251252
'data' => [
252-
'column' => $column,
253+
'column' => $query['column'],
253254
'operator' => $operator,
254255
'value' => $value,
255256
]
@@ -279,12 +280,13 @@ public function orWhere($column, $operator = null, $value = null)
279280
$temp = $this->console::configWhereClauseOperator($operator, $value);
280281
$value = $temp['value'];
281282
$operator = $temp['operator'];
283+
$query = $this->whereAndOrWhereQuery($column, $operator);
282284

283285
// or Where query add
284286
$this->where[] = [
285-
'query' => " OR {$column}{$operator}:{$column}",
287+
'query' => " OR {$query['query']}",
286288
'data' => [
287-
'column' => $column,
289+
'column' => $query['column'],
288290
'operator' => $operator,
289291
'value' => $value,
290292
]
@@ -612,6 +614,40 @@ public function select(?array $columns = [])
612614
return $this;
613615
}
614616

617+
/**
618+
* Create Where|orWhere Query
619+
* @param string $column
620+
* @param string $operator
621+
*
622+
* @return array
623+
* - query|column
624+
*/
625+
private function whereAndOrWhereQuery($column, $operator = null)
626+
{
627+
$columnString = $column;
628+
if($this->isJoinExist()){
629+
$columnString = substr($column, strpos($column, ".") + 1);
630+
$query = "{$column}{$operator}:{$columnString}";
631+
} else{
632+
$query = "{$column}{$operator}:{$column}";
633+
}
634+
635+
return [
636+
'query' => $query,
637+
'column' => $columnString,
638+
];
639+
}
640+
641+
/**
642+
* Check if join exist
643+
*
644+
* @return bool
645+
*/
646+
private function isJoinExist()
647+
{
648+
return is_array($this->joins) && count($this->joins) > 0;
649+
}
650+
615651
/**
616652
* Check if Raw or Where clause already exist
617653
*

0 commit comments

Comments
 (0)