我希望标题足够好地描述我的问题。我试图在laravel中创建地理搜索功能。这些查询本身是正确的。现在,我尝试从表中获取所有与先前查询的邮政编码匹配的文章。我在这里使用的所有功能都可以在这里找到:Laravel5将查询结果在foreach中添加到array。但是现在我想在多个或动态的where子句(带有or)中执行一个查询。在print_r($zipcodes)我以前的查询(得到从邮编范围内的所有邮编$zipcodes= $this->getZipcodes($zipCoordinateId, $distance);)输出:
print_r($zipcodes)
$zipcodes= $this->getZipcodes($zipCoordinateId, $distance);
Array ( [0] => stdClass Object ( [zc_zip] => 13579 [distance] => 0 ) [1] => stdClass Object ( [zc_zip] => 12345 [distance] => 2.228867736739 ) [2] => stdClass Object ( [zc_zip] => 98765 [distance] => 3.7191570094844 ) )
因此,当我想执行以下操作时,我在laravel中的查询应该如何显示?
SELECT * FROM articles WHERE zipcode = '13579' OR zipcode = '98765' OR zipcode = '12345';
预先感谢量化学家
更新
使用Balantant的解决方案,效果很好。这是我的代码:
// grabs all zipcodes matching the distance $zipcodes = $this->getZipcodes($zipCoordinateId, $distance); foreach ($zipcodes AS $key=>$val) { $zipcodes[$key] = (array) $val; } $codes = array_column($zipcodes, 'zc_zip'); $articles = Article::whereIn('zipcode', $codes)->get(); return view('pages.intern.articles.index', compact('articles'));
您可以同时使用whereIn和orWhere范围。第一个更适合您当前的示例。同样,您可以使用array_column来从上面的数组中获取所有真实的邮政编码。
whereIn
orWhere
array_column
$query->whereIn('zip', [12,34,999])->get(); // > array
更新:
当您要用于array_column获取数组的特定子值(如zc_zip)时,必须首先将其子级转换为数组。 如果是模型,则必须使用轻松对其进行转换toArray()。
zc_zip
toArray()
$zip_objects = [ (object) [ 'zc_zip' => 13579, 'distance' => 0 ], (object) [ 'zc_zip' => 12345, 'distance' => 2.228867736739 ], (object) [ 'zc_zip' => 98765, 'distance' => 3.7191570094844 ], ]; foreach ( $zip_objects AS $key=>$val ) { $zip_objects[$key] = (array) $val; } $zip_codes = array_column($zip_objects, 'zc_zip'); var_dump($zip_codes); // > array(3) { // > [0]=> // > int(13579) // > [1]=> // > int(12345) // > [2]=> // > int(98765) // > }