Как получить порядковый номер строки

Есть такая таблица и код выборки из базы:

id - name
1 - Москва
4 - Самара
5 - Саратов
7 - Вологда

$q = 'Са'; // поиск для примера

$query = DB::table('city')->select('*');
$query->where('name', 'like', "%{$q}%");
$rows = $query->get();

Результат:

 id - name
 4 - Самара
 5 - Саратов

Как мне в переменной $rows узнать какой это номер строки?

Из этого примера номера строк должны быть 2 и 3.

И самое главное номера order by должны быть по id, даже если сортировка по name, но номер строки нужно получить именно по сортировки id

Также с учетом постраничной навигации


Ответы (2 шт):

Автор решения: Sergey Mironov

Устал голову ломать, придумал такое решение на свой вопрос, главное задачу мою решает.

$cityRow = [];
$cityI = 1;
$rows = DB::table('city')->select('id')->orderBy('id', 'ASC')->get();
foreach($rows as $row){
    $cityRow[$row->id] = $cityI++;
}

$q = 'Са'; // поиск для примера
$query = DB::table('city')->select('*');
$query->where('name', 'like', "%{$q}%");
$rows = $query->get();

@foreach($rows as $row)
<tr>
    <td>{{ $cityRow[$row->id] }}</td>
    <td>{{ $row->name }}</td>
</tr>
@endforeach
→ Ссылка
Автор решения: Akina

Попробуйте преобразовать в синтаксис laravel вот такой запрос

SELECT t1.id, t1.name, COUNT(t2.id) AS rownum
FROM city AS t1
JOIN city AS t2 ON t1.id >= t2.id
WHERE t1.name LIKE '%{$q}%'
GROUP BY t1.id, t1.name
→ Ссылка