循环遍历数组以查询另一个将产生新结果数组的公式

时间:2014-09-09 21:02:19

标签: php laravel foreach laravel-4

我的第一个查询返回正确的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));
    }

但是,这会返回一个循环!

非常感谢任何帮助。谢谢。

1 个答案:

答案 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();