Mysql 翻译中的PyroCMS(Laravel)where子句工作不正常

Mysql 翻译中的PyroCMS(Laravel)where子句工作不正常,mysql,laravel,where,pyrocms,Mysql,Laravel,Where,Pyrocms,我已经为此挣扎了很长一段时间。我使用PyroCMS,它有一个Posts模块,该模块包含数据库中的所有字段以及所有内容。如果您想查找特定的帖子,您可以使用一个普通的WHERE子句,并按日期查找帖子,依此类推 但是如果一个字段在CMS中被检查为可翻译的,我就无法访问该字段并使用它来查找帖子,因为CMS在另一个表中创建了另一个字段,称为posts\u translations,它包含所有可翻译的字段。通常这是一个简单的$posts->where(“field”,“value”),但是如果该字段是可翻译

我已经为此挣扎了很长一段时间。我使用PyroCMS,它有一个
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实例