【问题标题】:How do I use in_array with Laravel QueryBuilder output?如何将 in_array 与 Laravel Query Builder 输出一起使用?
【发布时间】:2015-04-30 17:40:48
【问题描述】:

当我使用 laravel 的 DB 查询构建器时,它会返回一个数组,如下所示:

array(20421) {
  [0] =>
  class stdClass#887 (2) {
    public $color =>
    int(1)
    public $size =>
    string(6) "141793"
  }

我很喜欢使用 Laravel 集合,但这不是一个集合,因为我没有使用 eloquent(并且不想在这种情况下)。我的问题是,如何检查此数组中是否存在 color = 3 且 size = 123 的记录?

【问题讨论】:

  • 有什么理由需要检索 20k+ 条记录然后确定是否存在一条记录?
  • 我正在插入新数据,需要插入新数据,或更新旧数据。

标签: php laravel laravel-4


【解决方案1】:

您可以将结果包装在 Laravel 集合中并像以前一样使用它:

$result = DB::table('...')->get();
$collection = new \Illuminate\Support\Collection($result);

$exists = $collection->contains(function($key, $value){
    return $value->color == 3;
});

如果您必须担心性能,您可能希望使用它来代替
(或者甚至可以运行一个数据库查询?)

$exists = ! is_null(array_first($array, function($key, $value){
    return $value->color == 3;
}));

该集合在内部也使用array_first(它只是在数组上循环直到找到匹配项),但是如果没有该集合,您应该能够稍微提高性能。但是,我不知道它是否会引起注意。

【讨论】:

  • 这是检查结果中是否存在的最有效方法吗?
  • 你会如何处理这个系列? contains() 有闭包?
  • first() 带有闭包,但 contains 可能会更好,因为我不需要记录本身,只是一个布尔值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
  • 2014-03-15
  • 1970-01-01
  • 2020-07-26
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多