Skip to content

Commit be3f050

Browse files
committed
Use latest stacktrace frame to find unique queries
1 parent d047fb6 commit be3f050

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

src/QueryDetector.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ public function logQuery($query, Collection $backtrace)
6767
$relatedModel = $relationName;
6868
}
6969

70-
$key = md5($query->sql . $model . $relationName);
70+
$sources = $this->findSource($backtrace);
71+
72+
$key = md5($query->sql . $model . $relationName . $sources[0]->name . $sources[0]->line);
7173

7274
$count = array_get($this->queries, $key.'.count', 0);
7375

@@ -77,7 +79,7 @@ public function logQuery($query, Collection $backtrace)
7779
'model' => $model,
7880
'relatedModel' => $relatedModel,
7981
'relation' => $relationName,
80-
'sources' => $this->findSource($backtrace)
82+
'sources' => $sources
8183
];
8284
}
8385
}
@@ -91,7 +93,7 @@ protected function findSource($stack)
9193
$sources[] = $this->parseTrace($index, $trace);
9294
}
9395

94-
return array_filter($sources);
96+
return array_values(array_filter($sources));
9597
}
9698

9799
public function parseTrace($index, array $trace)

tests/QueryDetectorTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,4 +262,30 @@ public function it_does_not_fire_an_event_if_there_is_no_n1_query()
262262

263263
Event::assertNotDispatched(QueryDetected::class);
264264
}
265+
/** @test */
266+
public function it_uses_the_trace_line_to_detect_queries()
267+
{
268+
Route::get('/', function (){
269+
$authors = Author::all();
270+
$authors2 = Author::all();
271+
272+
foreach ($authors as $author) {
273+
$author->profile->city;
274+
}
275+
276+
foreach ($authors2 as $author) {
277+
$author->profile->city;
278+
}
279+
});
280+
281+
$this->get('/');
282+
283+
$queries = app(QueryDetector::class)->getDetectedQueries();
284+
285+
$this->assertCount(2, $queries);
286+
287+
$this->assertSame(Author::count(), $queries[0]['count']);
288+
$this->assertSame(Author::class, $queries[0]['model']);
289+
$this->assertSame('profile', $queries[0]['relation']);
290+
}
265291
}

0 commit comments

Comments
 (0)