当前位置: 首页 > 面试题库 >

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

红智鑫
2023-03-14
问题内容

我希望标题足够好地描述我的问题。我试图在laravel中创建地理搜索功能。这些查询本身是正确的。现在,我尝试从表中获取所有与先前查询的邮政编码匹配的文章。我在这里使用的所有功能都可以在这里找到:Laravel5将查询结果在foreach中添加到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';

预先感谢量化学家

更新

使用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'));

问题答案:

您可以同时使用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)
// > }


 类似资料:
  • 下面是我开始使用的代码,但我不确定该去哪里。看看这个问题的解决方案,我似乎需要根据下面的查询下载数据,然后在客户端对其进行排序。我似乎做不到的事

  • 问题内容: 我正在尝试检索仅在到达日期和机场匹配时才返回飞行数据的数据。我似乎无法找出最佳解决方案。我只能在机场或到达日期相同的地方提取数据,而不能在两者都提取(只能使用一次)。这是我当前的Java代码如下所示: 这是数据本身: 当前的Java代码将返回 仅 具有相同机场的所有子级。如您所料,当客户端需要排序的数据量比上述测试数据大得多时,这是不可行的。如何更好地在Firebase端过滤数据? 问

  • 问题内容: 给定一个ID数组,我想拥有一个SQL查询,该查询使用WHERE子句中的数组值,例如: 如何生成此查询字符串以用于MySQL? 问题答案: 谨防! 该答案包含一个严重的SQL注入漏洞。在未确保清除任何外部输入的情况下,请勿使用此处介绍的代码示例。

  • 我有一个数组$time\u schedule\u id=array(1,3,5)。现在我想要那些与$time\U schedule\u表中给定数组($time\U schedule\U id=array(1,3,5))不匹配的数据。 如何生成用于MySQL的查询字符串?

  • 问题内容: 我正在使用Laravel Eloquent查询构建器,并且在一个查询中需要多个条件的子句。它可以工作,但并不优雅。 例: 有没有更好的方法可以执行此操作,还是应该坚持使用此方法? 问题答案: 在Laravel 5.3中从6.x开始仍然适用,您可以使用更细粒度的wheres作为数组传递: 就个人而言,我并没有在多个调用中找到用例,但事实是您可以使用它。 自2014年6月起,您可以将数组传

  • 问题内容: 我最近才刚开始使用SQLAlchemy,但仍无法解决某些概念。 归结为基本元素,我有两个这样的表(通过Flask-SQLAlchemy): 我将如何查询用户列表及其最新帖子(不包括无帖子的用户)。如果我使用的是SQL,则可以执行以下操作: 因此,我确切地知道“期望的” SQL可以达到我想要的效果,但是不知道如何在SQLAlchemy中“正确地”表达它。 编辑:如果很重要,我使用的是SQ