Skip to content

Commit 741756e

Browse files
committed
add ability for different where clauses
1 parent 6611aae commit 741756e

File tree

4 files changed

+47
-3
lines changed

4 files changed

+47
-3
lines changed

src/Services/QueryNormalizer.php

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace Fico7489\Laravel\EloquentJoin\Services;
4+
5+
class QueryNormalizer
6+
{
7+
public static function normalize($parameters)
8+
{
9+
$firstParam = array_values($parameters)[0];
10+
11+
if (is_array($firstParam)) {
12+
$parametersNew = [];
13+
foreach ($firstParam as $k => $v) {
14+
$parametersNew = [$k, '=', $v];
15+
}
16+
} elseif (count($parameters) == 2) {
17+
$secondParam = array_values($parameters)[1];
18+
$parametersNew = [$firstParam, '=', $secondParam];
19+
} else {
20+
$parametersNew = $parameters;
21+
}
22+
23+
return $parametersNew;
24+
}
25+
26+
public static function normalizeScope($parameters)
27+
{
28+
unset($parameters[0]);
29+
$parameters = array_values($parameters);
30+
31+
return self::normalize($parameters);
32+
}
33+
}

src/Traits/EloquentJoinTrait.php

+5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Fico7489\Laravel\EloquentJoin\Relations\BelongsToJoin;
66
use Fico7489\Laravel\EloquentJoin\Exceptions\EloquentJoinException;
77
use Fico7489\Laravel\EloquentJoin\Relations\HasOneJoin;
8+
use Fico7489\Laravel\EloquentJoin\Services\QueryNormalizer;
89
use Illuminate\Database\Eloquent\Builder;
910

1011
trait EloquentJoinTrait
@@ -58,13 +59,17 @@ public function scopeSetSoftDelete(Builder $builder, $param)
5859

5960
public function scopeWhereJoin(Builder $builder, $column, $operator = null, $value = null, $boolean = 'and')
6061
{
62+
list($column, $operator, $value) = QueryNormalizer::normalizeScope(func_get_args());
6163
$column = $this->performJoin($builder, $column);
64+
6265
return $builder->where($column, $operator, $value, $boolean);
6366
}
6467

6568
public function scopeOrWhereJoin(Builder $builder, $column, $operator = null, $value)
6669
{
70+
list($column, $operator, $value) = QueryNormalizer::normalizeScope(func_get_args());
6771
$column = $this->performJoin($builder, $column);
72+
6873
return $builder->orWhere($column, $operator, $value);
6974
}
7075

src/Traits/JoinRelationTrait.php

+6-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace Fico7489\Laravel\EloquentJoin\Traits;
44

5+
use Fico7489\Laravel\EloquentJoin\Services\QueryNormalizer;
6+
57
trait JoinRelationTrait
68
{
79
/**
@@ -16,9 +18,11 @@ public function __call($method, $parameters)
1618
$softDeleteOptions = ['withTrashed', 'withoutTrashed', 'onlyTrashed'];
1719

1820
if ($method == 'where') {
19-
parent::__call('setWhereForJoin', $parameters);
21+
$parametersNew = QueryNormalizer::normalize($parameters);
22+
parent::__call('setWhereForJoin', $parametersNew);
2023
} elseif ($method == 'orWhere') {
21-
parent::__call('setOrWhereForJoin', $parameters);
24+
$parametersNew = QueryNormalizer::normalize($parameters);
25+
parent::__call('setOrWhereForJoin', $parametersNew);
2226
} elseif (in_array($method, $softDeleteOptions)) {
2327
parent::__call('setSoftDelete', [$method]);
2428
} else {

tests/Models/Seller.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ public function locationPrimaryInvalid()
3636
public function locationPrimaryInvalid2()
3737
{
3838
return $this->hasOne(Location::class)
39-
->where(['is_primary' => 1]);
39+
->where(function ($query) {
40+
return $query->where(['id' => 1]);
41+
});
4042
}
4143

4244
public function locationSecondary()

0 commit comments

Comments
 (0)