通过一次查询获取集合中的每一项
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');
我有一组 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');