gpt4 book ai didi

php - 带有子查询的 Laravel 查询不起作用

转载 作者:行者123 更新时间:2023-11-29 02:46:39 25 4
gpt4 key购买 nike

也许我做错了,但是我想在逻辑上做的是:

我想先选择所有包含特定字符串的帖子。

然后根据这些结果,我想将范围缩小到仅在特定日期 (Y|m|d) 内发布的帖子。

这就是我现在正在做的事情:

$results = DB::table('posts');

if ($query == null){
$query = "Posted On: " . $date;
}else {
$results->where('posts.title', 'LIKE', "%$query%")
->orWhere('posts.meta_description', 'LIKE', "%$query%")
->orWhere('posts.meta_keywords', 'LIKE', "%$query%")
->orWhere('posts.body', 'LIKE', "%$query%")
->orWhere('posts.seo_title', 'LIKE', "%$query%");
$query = $query." / Posted On: " . $date;
}


$results->where(function($query) use ($date){

$date = explode('-', $date);
if (!isset($date[1])){
$query->whereYear('created_at', '=', $date[0]);
}else if(isset($date[1]) && !isset($date[2])){
$query->whereYear('created_at', '=', $date[0])
->whereMonth('created_at', '=', $date[1]);
}else if (isset($date[1]) && isset($date[2])){
$query->whereYear('created_at', '=', $date[0])
->whereMonth('created_at', '=', $date[1])
->whereDay('created_at', '=', $date[2]);
}
});

$results = $results->paginate($this->paginate_size());

但是,此查询仍然只返回包含查询字符串的任何内容,而忽略了我想选择仅在特定年/月/日发布的子集这一事实。

我错过了什么?

编辑:

使用 $results->toSql();我收到查询:

select * from `posts` where `posts`.`title` LIKE ? or 
`posts`.`meta_description` LIKE ? or `posts`.`meta_keywords` LIKE ? or
`posts`.`body` LIKE ? or `posts`.`seo_title` LIKE ? and year(`created_at`) = ?

但是,它不起作用...

例如,如果我输入查询“Lorem”,它将找到所有包含文本 Lorem 的帖子。

但是,当我添加一个特定日期(例如“2015”)时,它不应该显示 2015 年的任何带有查询 Lorem 的帖子,因为它不存在。

所以这里有一些逻辑问题。有什么想法吗?

最佳答案

您不需要子查询。

如果您有适当的查询,您应该能够在同一个查询中访问。

当然,您可以使用带条件的动态 where,但要在同一个查询上执行。例如:

if ($query == null){
$query = "Posted On: " . $date;
}

$results->where('posts.title', 'LIKE', "%$query%")
->orWhere('posts.meta_description', 'LIKE', "%$query%")
->orWhere('posts.meta_keywords', 'LIKE', "%$query%")
->orWhere('posts.body', 'LIKE', "%$query%")
->orWhere('posts.seo_title', 'LIKE', "%$query%");

$date = explode('-', $date);
if (!isset($date[1])){
$results->whereYear('created_at', '=', $date[0]);
}else if(isset($date[1]) && !isset($date[2])){
$results->whereYear('created_at', '=', $date[0])
->whereMonth('created_at', '=', $date[1]);
}else if (isset($date[1]) && isset($date[2])){
$results->whereYear('created_at', '=', $date[0])
->whereMonth('created_at', '=', $date[1])
->whereDay('created_at', '=', $date[2]);
}

$results = $results->paginate($this->paginate_size());

关于php - 带有子查询的 Laravel 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41307183/

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