Laravel Eloquent Collection Search 总是返回 false

问题描述 投票:0回答:5

当我使用 Laravel Collection 搜索功能时,它总是返回 false。

代码:

$entries = Entry::all();
$results = $entries->search('Jack', true);
dd($results);

输出:

false

输出 dd($entries) :

    Collection {#218 ▼
  #items: array:9 [▼
    0 => Entry {#219 ▼
      #fillable: array:2 [▶]
      #connection: "mysql"
      #table: null
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:5 [▶]
      #original: array:5 [▶]
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #events: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #guarded: array:1 [▶]
    }
    1 => Entry {#220 ▶}
    2 => Entry {#221 ▶}
    3 => Entry {#222 ▶}
    4 => Entry {#223 ▶}
    5 => Entry {#224 ▶}
    6 => Entry {#225 ▶}
    7 => Entry {#226 ▶}
    8 => Entry {#227 ▶}
  ]
}

抱歉格式太糟糕了。

database laravel search collections eloquent
5个回答
0
投票

您需要使用带有

search()
方法的简单集合。因此,如果您想搜索名称,请执行以下操作:

$entries = Entry::pluck('name');
$results = $entries->search('Jack');

顺便说一句,这是一种非常糟糕的搜索方式,因为它会首先将所有条目加载到内存中,然后再进行搜索。

更好的方法是使用 Eloquent 或查询生成器:

$results = Entry::where('name', 'like', '%'.$name.'%')->get();

或者简单地说:

$results = Entry::where('name', $name)->get();

当您想要搜索全名时。


0
投票

您可以随时使用 Laravel Collections 的

filter()
功能:

$matchingRecords = $allRecords->filter(function($key, $record){
    return $record->name == "Jack";
});

替代方案是

first()
函数,将结果限制为第一个找到的结果,或
search()

查看 https://laravel.com/docs/5.4/collections#available-methods 了解更多信息。


0
投票

您持有的收藏有没有价值

Jack
?而不是 f.e. ‘杰克’?

根据文档 https://laravel.com/docs/5.4/scout#searching

Entry::search('Jack')->get();

应该可以解决问题,安装驱动程序。


0
投票

我添加了 Eloquence[0] 包。

[0] = https://github.com/jarektkaczyk/eloquence


0
投票

如果适用,请尝试:

$collection->hasAny($needle)

就我而言已经解决了。

© www.soinside.com 2019 - 2024. All rights reserved.