我一直为此苦苦挣扎。我使用PyroCMS,它具有一个Posts
模块,该模块具有数据库中的所有字段以及所有这些字段,如果您想查找特定的帖子,则可以只使用普通的WHERE
子句并查找帖子按日期等等。
但是,如果在CMS中将某个字段检查为可翻译的,则我将无法访问该字段并使用它来查找帖子,因为CMS在另一个表中创建了另一个字段,称为posts_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
,也许我需要使用其他一些类来访问我想要的东西?我非常困惑,我知道这是一个幼稚的基础,但是我无法真正解决这个简单的问题。
答案 0 :(得分:0)
您不应该在其中使用一个字母变量和太多嵌套函数:
/**
* 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',
],
要直接使用数据库查询,您需要编写翻译并加入self。并不困难。