Я хочу передать 5000 пользовательских документов из Firerstore в таблицу HTML с помощью Laravel, но получаю сообщение об ошибке «вызов неопределенного метода Google\Cloud\Firestore\QuerySnapshot::count()». Пожалуйста, в чем я ошибаюсь:
public function history(Request $request)
{
$history = app('firebase.firestore')->database()->collection($this->tablenamePayment);
$lastVisible = null;
if ($request->input('last_visible')) {
$lastVisible = $history->document($request->input('last_visible'))->snapshot();
}
$query = $history->startAt($lastVisible ? [$lastVisible] : []);
$documents = $query->limit(2000)->documents();
$data = [];
foreach ($documents as $document) {
$data[] = [
'id' => $document->id(),
'name' => $document->get('name'),
'email' => $document->get('email'),
];
}
$nextVisible = null;
if ($documents->count() === 2000) {
$nextVisible = $documents->last()->id();
}
return view('admin.payment-history', compact('data', 'nextVisible'));
}
// View (Blade template):
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
@foreach($data as $document)
<tr>
<td>{{ $document['id'] }}</td>
<td>{{ $document['name'] }}</td>
<td>{{ $document['email'] }}</td>
</tr>
@endforeach
</tbody>
</table>
@if ($nextVisible)
<a href = "{{ route('firestore', ['last_visible' => $nextVisible]) }}">Next Page</a>
@endif
это дало мне сообщение об ошибке «Вызов неопределенного метода Google\Cloud\Firestore\QuerySnapshot::last()», пожалуйста, что еще я могу сделать, чтобы решить эту проблему, пожалуйста
пожалуйста, я получил эту ошибку «Вызов неопределенного метода Google\Cloud\Firestore\QuerySnapshot::end()»
Я просто добавлю это в ответ
Вы получаете следующую ошибку:
Вызов неопределенного метода Google\Cloud\Firestore\QuerySnapshot::count()
Потому что класс QuerySnapshot не содержит count()
функции. С другой стороны, класс Query содержит функцию count(). Поэтому, если вы хотите подсчитать документы, возвращаемые запросом, вызовите count()
непосредственно на объекте Query
.
пожалуйста, как это сделать, пожалуйста
Как упоминалось @AlexMamo, вы работаете не с коллекцией laravel, а с экземпляром QuerySnapshot. Методы count()
и last()
не существуют в этом классе (или определены с другим именем, например, вместо count()
вам нужно вызвать size()).
Вы уже зациклились на нем и у вас есть удобный $data
для выполнения тех же действий с
$nextVisible = null;
if (count($data) === 2000) {
$lastEntry = end($data);
$nextVisible = $lastEntry['id'];
}
Пожалуйста, он указал на ошибку в моем представлении (шаблон Blade) «Маршрут [firestore] не определен.»..
@SamuelEmeh это еще одна ошибка, не связанная с заданным вами вопросом. В любом случае вы понимаете, что так продолжать нельзя и вам нужно научиться разрабатывать/отлаживать код или хотя бы кодировать на laravel.
вы можете просто заменить
$documents->count()
наcount($data)