Mysql 翻译中的PyroCMS(Laravel)where子句工作不正常
我已经为此挣扎了很长一段时间。我使用PyroCMS,它有一个Mysql 翻译中的PyroCMS(Laravel)where子句工作不正常,mysql,laravel,where,pyrocms,Mysql,Laravel,Where,Pyrocms,我已经为此挣扎了很长一段时间。我使用PyroCMS,它有一个Posts模块,该模块包含数据库中的所有字段以及所有内容。如果您想查找特定的帖子,您可以使用一个普通的WHERE子句,并按日期查找帖子,依此类推 但是如果一个字段在CMS中被检查为可翻译的,我就无法访问该字段并使用它来查找帖子,因为CMS在另一个表中创建了另一个字段,称为posts\u translations,它包含所有可翻译的字段。通常这是一个简单的$posts->where(“field”,“value”),但是如果该字段是可翻译
Posts
模块,该模块包含数据库中的所有字段以及所有内容。如果您想查找特定的帖子,您可以使用一个普通的WHERE
子句,并按日期查找帖子,依此类推
但是如果一个字段在CMS中被检查为可翻译的,我就无法访问该字段并使用它来查找帖子,因为CMS在另一个表中创建了另一个字段,称为posts\u translations,它包含所有可翻译的字段。通常这是一个简单的$posts->where(“field”,“value”)
,但是如果该字段是可翻译的,它就不存在
因此,我尝试使用whereHas,但它实际上没有返回任何内容
public function meklet(PostRepositoryInterface $posts, $q)
{
$postss = $posts->all()->whereHas('translations', function($query) use($q) {
$query = $query->where(function($query) use($q) {
$query->where('title', 'like', '%'.$q.'%');
});
});
die(var_dump($q));
return $this->view->make("mendo.module.report::reports/search");
}
如您所见,我使用了
PostRepositoryInterface
也许我需要使用其他类来访问我想要的内容?我很困惑,我知道这是一个laravel基,但我不能真正理解这个简单的问题。你不应该在这里使用单字母变量和太多嵌套函数:
/**
* Searches for all matches.
*
* @param PostRepositoryInterface $posts The posts
* @param string $search The search
* @return View
*/
public function search(PostRepositoryInterface $posts, $search)
{
/* @var PostCollection $results */
$results = $posts->all()->filter(
function (PostInterface $post) use ($search) {
return str_contains(
strtolower($post->getFieldValue('title')),
strtolower($search)
);
}
);
dd($results);
return $this->view->make('mendo.module.report::reports/search', [
'posts' => $results,
]);
}
路线应该是这样的:
'posts/search/{search}' => [
'as' => 'anomaly.module.posts::posts.search',
'uses' => 'Anomaly\PostsModule\Http\Controller\PostsController@search',
],
要直接使用DB查询,您需要编写转换。这并不难。$posts->all()为您返回PostCollection实例