gpt4 book ai didi

php - 拉维尔 5.1 : SQL query 'where LIKE %word%word%word%' not working

转载 作者:行者123 更新时间:2023-11-29 01:38:06 25 4
gpt4 key购买 nike

请记住,我的 SQL 经验很少,所以我可能做错了。

我正在尝试设置一个表的搜索,但仅搜索用户输入的字符串并不理想,因为尽管可能会出现“steve”的结果,但如果用户键入“steve jobs story”,则不会匹配任何内容如果不存在,因为它将查找整个字符串,而不是分别查找每个单词。

我试图通过将字符串分解成一个数组然后分解它并用 % 分隔它来分解它,所以像“steve jobs story”这样的搜索将是“steve%jobs%story”,而我的查询它将是“%steve%jobs%story%”。当我尝试搜索这个时,我没有收到任何错误,但查询什么也没找到,而当我只输入一个词时它起作用了,所以我猜我试图做的事情是不允许的。

有人能指出我正确的方向吗?这是我的 Controller /模型:

// Controller

$query = $request->get('q');

$explodedQuery = explode(" ", $query);
$newQuery = implode("%", $explodedQuery);

$articles = Article::isLikeTitle($newQuery)
->isLikeBody($newQuery)
->latest('published_at')
->published()
->paginate(10);

// Model

public function scopeIsLikeTitle($query, $q)
{
return $query->where('title', 'LIKE', "%$q%");
}

public function scopeIsLikeBody($query, $q)
{
return $query->where('body', 'LIKE', "%$q%");
}

最佳答案

你可以像这样使用循环来附加带有 orWhere 的查询

$query = $request->get('q');

$explodedQuery = explode(" ", $query);

$articles = Article::isLikeTitle($explodedQuery)
->isLikeBody($explodedQuery)
->latest('published_at')
->published()
->paginate(10);

// Model

public function scopeIsLikeTitle($query, $q)
{
foreach($q as $eachQueryString)
{
$query->orWhere('title', 'LIKE', '%'.$eachQueryString .'%');
}
return $query;
}

public function scopeIsLikeBody($query, $q)
{
foreach($q as $eachQueryString)
{
$query->orWhere('body', 'LIKE', '%'.$eachQueryString .'%');
}
return $query;
}

关于php - 拉维尔 5.1 : SQL query 'where LIKE %word%word%word%' not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33943607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com