通过一次查询获取集合中的每一项

Get each item in a collection with one query

我有一组 slug,想通过一个查询获取每个对应的页面。

类似...

Page::whereIn('slug', $slugs)->get();

... 仅 return 匹配集合中任何 slug 的第一页。

目前有一个循环,但这是我想避免的几十个查询。

尝试使用 whereRaw 方法并将数组内爆成字符串:

Page::whereRaw('slug IN ("' . $slugs->implode('","') . ')')->get();

事实证明,whereIn 是正确的方法。我的逻辑有一个小错误,同时播种数据不足,一切都炸毁了。

如有人不知:whereRaw慎用。为避免 SQL 注入漏洞,所有用户提交的条目都必须作为参数传递。

Page::whereRaw('slug IN (?)', [$slug]);

注意:用引号将 ? 括起来是一个语法错误。默认情况下,传递的数据将被单引号括起来,至少在我的机器上是这样。

select * from `pages` where `slug` in ('page');