Laravel запрос к базе данных прочитан без использования get - PullRequest
0 голосов
/ 16 апреля 2020

Я потратил 1 час на поиск этого в Google, но мне не повезло

Это мой первый раз с Laravel. Я должен попробовать базовый c пример с базами данных. Сначала мой старый код использует обычный php:

echo "<table border=1>";
$q="SELECT * from USERS"; 
$result = $mysqli->query($q);
while(($o = $result->fetch_object()))
{   
    echo "<tr>";
    echo "<td>$o->ID</td><td>$o->Name</td>";
    echo "</tr>";
}
echo "</table>";

Теперь я пытаюсь сделать то же самое в laravel

$query=DB::Table("users")->select("*");

Я знаю, что могу использовать

$allrows=$query->get();

Этот получает все результаты в массиве, но если у вас 2 миллиона пользователей, это большая проблема.

А эта возвращает первую строку

$Firstrow=$query->first();

Я просто хочу получить строки одну за другой, что-то вроде

$query=DB::Table("users")->select("*");

while($o=$query->next())
    {   
        echo "<tr>";
        echo "<td>$o->ID</td><td>$o->Name</td>";
        echo "</tr>";
    }

Возможно, я ошибаюсь, так как я Я новичок в Laravel, но это использует меньше памяти, так как только один активный.

PD: Я видел разбиение на страницы в laravel, но я просто хочу старый метод строка за строкой ... если это возможно.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 16 апреля 2020

Для чего-то подобного вы можете использовать метод cursor():

$users = DB::table('users')->cursor();

foreach ($users as $user) {
    echo $user->id;
}

Если вы передаете $users в блейд-файл, вы можете получить следующее

<table>
    <tr>
        @foreach($users as $user)
            <td>{{ $user->ID }}</td>
            <td>{{ $user->Name }}</td>
        @endforeach
    </tr>
</table>
1 голос
/ 16 апреля 2020

Вы должны использовать метод курсора вместо функции get (). так как метод курсора позволяет вам перебирать записи вашей базы данных, используя курсор, который будет выполнять только один запрос.

foreach (Flight::where('foo', 'bar')->cursor() as $flight) {
    //
}

ссылка: - https://laravel.com/docs/7.x/eloquent

0 голосов
/ 16 апреля 2020

Вы можете использовать метод чанков, предоставленный eloquent. Подробнее об этом здесь https://laraveldaily.com/process-big-db-table-with-chunk-method/

DB::table('users')->chunk(100, function($users)
{
    foreach ($users as $user)
    {
        //do something
    }
});
...