我的第一个查询返回正确的ID
值:
$coordinates = Coordinate::select('id')
->whereBetween('lat', array($minlat, $maxlat))
->whereBetween('lng', array($minlng, $maxlng))
->get();
使用DD
输出结果返回(例如缩写):
["original":protected]=> array(1) { ["id"]=> string(4) "1495" }
现在,将有超过100个ID,我现在要做的是,查看另一个表 - Locations
,并在coordinate_id
列中匹配具有此ID的所有行,并返回all columns
。
最初,我想到了这一点:
foreach($coordinates as $coordinate)
{
echo(Location::where('id', '=', $coordinate));
}
但是,这会返回一个循环!
非常感谢任何帮助。谢谢。
答案 0 :(得分:0)
而不是:
$coordinates = Coordinate::select('id')
->whereBetween('lat', array($minlat, $maxlat))
->whereBetween('lng', array($minlng, $maxlng))
->get();
使用:
$coordinates = Coordinate::whereBetween('lat', array($minlat, $maxlat))
->whereBetween('lng', array($minlng, $maxlng))
->lists('id'); // array of ids
// then
$locations = Location::whereIn('coordinate_id', $coordinates)->get();
它将返回您正在寻找的位置模型集合。
如果您设置了whereHas
关系,也可以使用coordinate
:
$locations = Location::whereHas('coordinate', function ($q) use ($minlat, $maxlat, $minlng, $maxlng) {
$q->whereBetween('lat', array($minlat, $maxlat))
->whereBetween('lng', array($minlng, $maxlng));
})->get();