【问题标题】:Laravel database query read not using getLaravel 数据库查询读取不使用 get
【发布时间】:2020-04-16 12:01:31
【问题描述】:

我花了 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 中看到过分页,但我只想逐行使用旧方法...如果可能的话。

提前致谢。

【问题讨论】:

  • 你使用的是什么版本的 Laravel?
  • 最后可能,Laravel Framework 7.6.1

标签: php mysql laravel select fetch


【解决方案1】:

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

【讨论】:

  • 谢谢,这就是我要找的。​​span>
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢这是我要找的,但选择的是以前的。
【解决方案3】:

你可以使用 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
    }
});

【讨论】:

  • 是的,块是一种选择,但我正在寻找我在 mysql 中的方式。
  • 好的,没问题。
猜你喜欢
  • 2017-08-30
  • 1970-01-01
  • 2015-06-04
  • 2020-09-08
  • 2014-06-04
  • 2017-08-22
  • 2021-03-21
  • 1970-01-01
相关资源
最近更新 更多