Php 拉威尔和一个While循环

Php 拉威尔和一个While循环,php,laravel,while-loop,Php,Laravel,While Loop,我刚接触Laravel,目前我在控制器中有一段代码,没有循环,当它工作时,它从数据库检索我的查询 public function dash($id, Request $request) { $user = JWTAuth::parseToken()->authenticate(); $postdata = $request->except('token'); $q = DB::select('SELECT * FROM maps WH

我刚接触Laravel,目前我在控制器中有一段代码,没有
循环,当它工作时,它从数据库检索我的查询

public function dash($id, Request $request) {
        $user = JWTAuth::parseToken()->authenticate();
        $postdata = $request->except('token');

        $q = DB::select('SELECT * FROM maps WHERE user_id = :id', ['id' => $id]);

        if($q->num_rows > 0){
            $check = true;

            $maps = array();
            while($row = mysqli_fetch_array($q)) {
                $product = array(
                    'auth' => 1,
                    'id' => $row['id'],
                    'url' => $row['url'],
                    'locationData' => json_decode($row['locationData']),
                    'userData' => json_decode($row['userData']),
                    'visible' => $row['visible'],
                    'thedate' => $row['thedate']
                );
                array_push($maps, $product);
            }
        } else {
            $check = false;
        }

        return response()->json($maps);
    }

我试图循环使用从
$q
返回的数据,并在两个键/val对上使用
json\u decode
,但我甚至无法正确完成此操作。

不要使用
mysqli
来迭代结果()。从Laravel返回的结果是,因此您可以简单地使用foreach循环:

$q = DB::select('...');
foreach($q as $row) {
    // ...
}
每个
$row
都将是一个对象而不是数组:

$product = array(
    'auth' => 1,
    'id' => $row->id,
    'url' => $row->url,
    'locationData' => json_decode($row->locationData),
    'userData' => json_decode($row->userData),
    'visible' => $row->visible,
    'thedate' => $row->thedate
);

不要使用
mysqli
迭代结果()。从Laravel返回的结果是,因此您可以简单地使用foreach循环:

$q = DB::select('...');
foreach($q as $row) {
    // ...
}
每个
$row
都将是一个对象而不是数组:

$product = array(
    'auth' => 1,
    'id' => $row->id,
    'url' => $row->url,
    'locationData' => json_decode($row->locationData),
    'userData' => json_decode($row->userData),
    'visible' => $row->visible,
    'thedate' => $row->thedate
);

您可以使用
foreach
循环$q:

foreach ($q as $row) {
  // Do work here
}

请参阅。

您可以使用
foreach循环$q

foreach ($q as $row) {
  // Do work here
}

  • 您没有在该函数中使用
    $postdata
    ,请将其删除
  • 不要在Laravel中使用mysqli
  • 你真是太棒了。它总是返回一个非假值,这就是为什么循环永远不会结束
  • 为什么要在行数据上循环?只需返回查询结果——它们已经是一个数组了。如果您希望像“locationData”和“userData”这样的东西被解码为JSON,那么请使用一个带有方法的模型来为您完成这项工作。记住,使用MVC时,您应该始终将任何与数据相关的内容放入模型中
  • 因此,更好的方法是使用Laravel:

  • 您没有在该函数中使用
    $postdata
    ,请将其删除
  • 不要在Laravel中使用mysqli
  • 你真是太棒了。它总是返回一个非假值,这就是为什么循环永远不会结束
  • 为什么要在行数据上循环?只需返回查询结果——它们已经是一个数组了。如果您希望像“locationData”和“userData”这样的东西被解码为JSON,那么请使用一个带有方法的模型来为您完成这项工作。记住,使用MVC时,您应该始终将任何与数据相关的内容放入模型中
  • 因此,更好的方法是使用Laravel:


    +我希望这里不要吹毛求疵,但我会调用模型
    Map
    ,因为每个实例只代表一行。我曾经这样做过,但后来我发现我经常做类似
    Map::where('foo','bar')->get()的事情
    所以对于我正在编写的代码,保持其复数形式是有意义的,因为该模型负责所有地图,即地图表。虽然你肯定有道理。我认为这取决于典型用法的风格。+1希望这里不要吹毛求疵,但我会调用模型
    Map
    ,因为每个实例只代表一行。我过去经常这样做,但后来我发现我经常做
    Map::where('foo','bar')->get()
    所以对于我正在编写的代码,保持其复数形式是有意义的,因为该模型负责所有地图,即地图表。虽然你肯定有道理。我认为这取决于典型用法的风格。