我想收集名称在数组中的所有标签ID。为此,我正在使用whereIn
,如此:
$tags = Category::whereIn('name', $tag_names)->pluck('id')->toArray();
我工作得很完美,但我没有选择(我知道)使whereIn
的操作符不具备案例。
$tag_names
是一个标记名称数组,具有任意大小写。
'name'
是保存数据库中标记名称的列,其特定大小写可能与$tag_names
中的标记不匹配。
Category
表的postgresql架构是:
CREATE TABLE categories (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
description TEXT,
num_posts INTEGER DEFAULT 0 NOT NULL
);
答案 0 :(得分:0)
搜索中的数组使其变得更加困难。如果您想要一个不区分大小写的结果,您可以将它们强制用于一个案例:
$tags = Category::whereIn( 'LCASE(name)' , strtolower($tag_names) )
或者,如果您想在不强制案件的情况下进行匹配,可以尝试:
$query = Category::with('tags');
foreach ($tag_names as $tag) {
$query->whereHas('tag', function($q) use ($tag) {
$q->where('name', 'ilike', $tag);
});
}
$query->get();