来自给定数组的查询中的 Laravel 多个 where 子句

Posted

技术标签:

【中文标题】来自给定数组的查询中的 Laravel 多个 where 子句【英文标题】:Laravel multiple where clauses in query from given array 【发布时间】:2016-02-16 15:22:38 【问题描述】:

我希望标题能很好地描述我的问题。 我试图在 laravel 中创建一个地理搜索功能。查询本身是正确的。现在我尝试从我的表中获取所有文章,这些文章与之前查询的获取的邮政编码匹配。我使用的所有功能都可以在这里找到:Laravel 5 add results from query in a foreach to array)。但现在我想在多个或动态 where 子句(使用 or)中执行一个查询。 我之前查询的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';

提前谢谢你, 量子论者

更新

使用 balintant 的解决方案可以正常工作。这是我的代码:

// 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'));

【问题讨论】:

使用IN(...) sql构造。在 Laravel 中有 whereIn() Builder 方法。看看吧。 【参考方案1】:

您可以同时使用whereInorWhere 范围。第一个更适合您当前的示例。另外,您可以使用array_column 从上面的数组中获取所有真实的邮政编码。

$query->whereIn('zip', [12,34,999])->get();
// > array

更新:

当您想使用array_column 来获取数组的特定子值(如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)
// > 

【讨论】:

好的好的。但是如何使用 '$zipcodes->zc_zip' 而不是 [12,34,999] 进行查询?

以上是关于来自给定数组的查询中的 Laravel 多个 where 子句的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel 在 Azure 中来自单个请求的多个重复 HTTP 请求/查询

如何在 Laravel 中 MySQL 查询的 where 子句中使用数组 [重复]

在 laravel 中导出 excel 或 csv 中的多维数组

laravel collection 分类

Laravel:多个查询与存储过程

如何在 Laravel 中加入来自不同主机的多个数据库