Skip to content

Commit 3054e6e

Browse files
authored
Fixes a mix up between latest() and oldest() (#146)
1 parent 4e05cbb commit 3054e6e

File tree

3 files changed

+20
-25
lines changed

3 files changed

+20
-25
lines changed

docs/rector_rules_overview.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -498,9 +498,9 @@ Changes `orderBy()` to `latest()` or `oldest()`
498498
-$builder->orderBy('created_at');
499499
-$builder->orderBy('created_at', 'desc');
500500
-$builder->orderBy('deleted_at');
501-
+$builder->latest();
502501
+$builder->oldest();
503-
+$builder->latest('deleted_at');
502+
+$builder->latest();
503+
+$builder->oldest('deleted_at');
504504
```
505505

506506
<br>

src/Rector/MethodCall/EloquentOrderByToLatestOrOldestRector.php

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,7 @@
55
namespace RectorLaravel\Rector\MethodCall;
66

77
use PhpParser\Node;
8-
use PhpParser\Node\Arg;
9-
use PhpParser\Node\Expr;
108
use PhpParser\Node\Expr\MethodCall;
11-
use PhpParser\Node\Identifier;
12-
use PhpParser\Node\Scalar\String_;
13-
use PhpParser\Node\VariadicPlaceholder;
149
use PHPStan\Type\ObjectType;
1510
use Rector\Core\Rector\AbstractRector;
1611
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
@@ -38,9 +33,9 @@ public function getRuleDefinition(): RuleDefinition
3833
<<<'CODE_SAMPLE'
3934
use Illuminate\Database\Eloquent\Builder;
4035
41-
$builder->latest();
4236
$builder->oldest();
43-
$builder->latest('deleted_at');
37+
$builder->latest();
38+
$builder->oldest('deleted_at');
4439
CODE_SAMPLE
4540
,
4641
),
@@ -71,44 +66,44 @@ private function isOrderByMethodCall(MethodCall $methodCall): bool
7166
// Check if it's a method call to `orderBy`
7267

7368
return $this->isObjectType($methodCall->var, new ObjectType('Illuminate\Database\Query\Builder'))
74-
&& $methodCall->name instanceof Identifier
69+
&& $methodCall->name instanceof Node\Identifier
7570
&& ($methodCall->name->name === 'orderBy' || $methodCall->name->name === 'orderByDesc')
76-
&& $methodCall->args !== [];
71+
&& count($methodCall->args) > 0;
7772
}
7873

7974
private function convertOrderByToLatest(MethodCall $methodCall): MethodCall
8075
{
81-
if (! isset($methodCall->args[0]) && ! $methodCall->args[0] instanceof VariadicPlaceholder) {
76+
if (! isset($methodCall->args[0]) && ! $methodCall->args[0] instanceof Node\VariadicPlaceholder) {
8277
return $methodCall;
8378
}
8479

8580
$columnVar = $methodCall->args[0]->value ?? null;
86-
if (! $columnVar instanceof Expr) {
81+
if ($columnVar === null) {
8782
return $methodCall;
8883
}
8984

9085
$direction = $methodCall->args[1]->value->value ?? 'asc';
9186
if ($this->isName($methodCall->name, 'orderByDesc')) {
92-
$newMethod = 'oldest';
87+
$newMethod = 'latest';
9388
} else {
94-
$newMethod = $direction === 'asc' ? 'latest' : 'oldest';
89+
$newMethod = $direction === 'asc' ? 'oldest' : 'latest';
9590
}
96-
if ($columnVar instanceof String_ && $columnVar->value === 'created_at') {
97-
$methodCall->name = new Identifier($newMethod);
91+
if ($columnVar instanceof Node\Scalar\String_ && $columnVar->value === 'created_at') {
92+
$methodCall->name = new Node\Identifier($newMethod);
9893
$methodCall->args = [];
9994

10095
return $methodCall;
10196
}
10297

103-
if ($columnVar instanceof String_) {
104-
$methodCall->name = new Identifier($newMethod);
105-
$methodCall->args = [new Arg(new String_($columnVar->value))];
98+
if ($columnVar instanceof Node\Scalar\String_) {
99+
$methodCall->name = new Node\Identifier($newMethod);
100+
$methodCall->args = [new Node\Arg(new Node\Scalar\String_($columnVar->value))];
106101

107102
return $methodCall;
108103
}
109104

110-
$methodCall->name = new Identifier($newMethod);
111-
$methodCall->args = [new Arg($columnVar)];
105+
$methodCall->name = new Node\Identifier($newMethod);
106+
$methodCall->args = [new Node\Arg($columnVar)];
112107

113108
return $methodCall;
114109
}

tests/Rector/MethodCall/EloquentOrderByToLatestOrOldestRector/Fixture/fixture.php.inc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ use Illuminate\Database\Query\Builder;
2424
$column = 'tested_at';
2525

2626
/** @var Builder $query */
27-
$query->latest();
2827
$query->oldest();
29-
$query->latest('submitted_at');
28+
$query->latest();
3029
$query->oldest('submitted_at');
31-
$query->latest($column);
30+
$query->latest('submitted_at');
31+
$query->oldest($column);
3232

3333
?>

0 commit comments

Comments
 (0)