如何在 laravel 中使用 foreach 循环和 querybuilder 进行更新

我有一个名为的表schools,我在那里有一个列lat,long我将它定义为空,因为我希望它稍后使用谷歌地理编码填充坐标。现在我已经为谷歌地理编码设置了我的 api 并获得了坐标。我想使用 geocode api 和 querybuilder更新列lat和我的数据库。long我使用了 foreach 查询,但是当我这样做时,dd它会打印最后一个数据。有人可以告诉我应该如何更新它们吗?谢谢。


数据库结构


+---------------------------------------------+---------------------------+-------------+-----+-----+

| school_name                                 | address                   | postal_code | lat | lng |

+---------------------------------------------+---------------------------+-------------+-----+-----+

| NGEE ANN SECONDARY SCHOOL                   | 1 TAMPINES STREET 32      | 529283      |     |     |

| SINGAPORE SPORTS SCHOOL                     | 1 CHAMPIONS WAY           | 737913      |     |     |

| NUS HIGH SCHOOL OF MATHEMATICS AND SCIENCE  | 20 CLEMENTI AVENUE 1      | 129957      |     |     |

| SCHOOL OF THE ARTS, SINGAPORE               | 1 ZUBIR SAID DRIVE        | 227968      |     |     |

| NORTHLIGHT SCHOOL                           | 151 TOWNER ROAD           | 327830      |     |     |

| ASSUMPTION PATHWAY SCHOOL                   | 30 CASHEW ROAD            | 679697      |     |     |

| SCHOOL OF SCIENCE AND TECHNOLOGY, SINGAPORE | 1 TECHNOLOGY DRIVE        | 138572      |     |     |

| CREST SECONDARY SCHOOL                      | 561 JURONG EAST STREET 24 | 609561      |     |     |

| SPECTRA SECONDARY SCHOOL                    | 1 WOODLANDS DRIVE 64      | 737758      |     |     |

+---------------------------------------------+---------------------------+-------------+-----+-----+


响应来自最后一个邮政数据737758


冉冉说
浏览 224回答 3
3回答

摇曳的蔷薇

dd()返回最后一个数据,因为您在每个循环中都将值设置为地址,所以最后一个地址返回最后一个值。如果你想更新它,你可以这样做:        foreach ($postals as $postal){            $address = $geocoder->getCoordinatesForAddress($postal->postal_code);            DB::table('schools')                    ->where('postal', $postal->postal_code)                    ->update(['lat' => $address['lat'], 'lng' => $address['lng']]);        }

holdtom

将变量声明$address为数组并尝试foreach ($postals as $postal){    $address[] = $geocoder->getCoordinatesForAddress($postal->postal_code);}

米脂

好吧,您知道您查询的地址的邮政编码,并且您有相应的 lat/lng 值。现在您必须从答案中提取值并构建 UPDATE 查询文本。对于显示的答案是UPDATE schooolsSET  lat = 1.4364557        /* $address->lat */   , lng = 103.8043789      /* $address->lng */WHERE postal_code = 737758; /* $postal->postal_code */然后你必须执行它。foreach ($postals as $postal)对每个邮政编码在同一周期内执行此操作。您还可以更新该address字段(或插入该字段formatted_address并更新它)。
打开App,查看更多内容
随时随地看视频慕课网APP