返回

Laravel 根据多个 ID 检索模型结果:终极指南

php

使用 Laravel 根据多个 ID 检索模型结果

问题:从搜索引擎中检索 ID,并根据这些 ID 查找模型结果

想象一下,你有一个集成到你的 Laravel 应用程序中的搜索引擎,例如 ZendSearch。当用户进行搜索时,它会返回一个按相关性排序的 ID 数组。但是,这些数组不包含实际的模型数据。你现在需要一种方法来根据这些 ID 从数据库中检索完整的模型结果。

解决方法:whereIn()findMany()

幸运的是,Laravel 为此提供了两种便捷的方法:

1. whereIn() 方法

whereIn() 方法允许你使用一个数组作为参数,其中包含要查询的值。要使用它来根据 ID 数组检索结果,你可以使用以下语法:

$ids = [1, 2, 3, 4, 5];

$results = Model::whereIn('id', $ids)->get();

这将按 $ids 数组中指定的顺序检索 ID 为 1、2、3、4 和 5 的记录。

2. findMany() 方法(Laravel 8 及更高版本)

findMany() 方法是一个更简洁的选项,它允许你直接传递一个 ID 数组作为参数:

$ids = [1, 2, 3, 4, 5];

$results = Model::findMany($ids);

这也会按 $ids 数组中指定的顺序检索结果。

代码示例

使用 whereIn() 方法的示例代码如下:

$zendSearchIds = [1, 3, 5, 2, 4]; // 从 ZendSearch 返回的 ID 数组

$results = Model::whereIn('id', $zendSearchIds)->get();

foreach ($results as $result) {
    // 使用结果...
}

此代码将按 $zendSearchIds 数组中指定的顺序检索结果。

结论

whereIn()findMany() 方法提供了方便的方法来根据多个 ID 检索 Laravel 模型结果。这在需要按特定顺序检索记录时非常有用,例如,在使用 ZendSearch 或其他搜索引擎返回的结果时。

常见问题解答

1. 哪种方法更好,whereIn() 还是 findMany()

findMany() 方法更简洁,并且在 Laravel 8 及更高版本中可用。

2. 我可以将这些方法与其他查询条件结合使用吗?

是的,你可以使用 whereIn()findMany() 与其他查询条件(例如 where()orderBy()) 结合使用。

3. 如果我传递一个不存在的 ID 会怎样?

如果传递一个不存在的 ID,则相应的结果将从结果集中排除。

4. 如果我传递一个重复的 ID 会怎样?

重复的 ID 将被忽略,结果集中只包含每个 ID 的一个实例。

5. 是否有其他检索模型结果的方法?

whereIn()findMany() 是最常用的方法,但还有其他选项,例如使用 pluck() 方法或直接使用 SQL 查询。