为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 数据库查询读取不使用 get

Laravel 数据库查询读取不使用 get

PHP
aluckdog 2022-12-23 16:28:18
我花了 1 小时在谷歌上寻找这个,但我没有运气这是我第一次使用 Laravel。我必须尝试使用数据库的基本示例。首先是我使用普通 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();这个将所有结果都放在一个数组中,但是如果您有 200 万用户,那将是一个大问题。这个返回第一行$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 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

对于这样的事情,您可以使用以下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>


查看完整回答
反对 回复 2022-12-23
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

您应该使用游标方法而不是 get() 函数。因为游标方法允许您使用游标遍历数据库记录,游标只会执行一个查询。


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

    //

}

参考链接:- https://laravel.com/docs/7.x/eloquent


查看完整回答
反对 回复 2022-12-23
?
holdtom

TA贡献1805条经验 获得超10个赞

你可以使用 eloquent 提供的 chunks 方法。在这里阅读更多相关信息https://laraveldaily.com/process-big-db-table-with-chunk-method/


DB::table('users')->chunk(100, function($users)

{

    foreach ($users as $user)

    {

        //do something

    }

});


查看完整回答
反对 回复 2022-12-23
  • 3 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信