pyrocms(laravel)where子句在翻译中不能正常工作

k3bvogb1  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(280)

我已经挣扎了很长一段时间了。我用pyrocms,它有一个 Posts 包含数据库中所有字段的模块,如果您想查找特定的文章,可以使用普通的 WHERE 从句和按日期找到一个职位等等。
但是如果一个字段在cms中被检查为可翻译的,我就不能访问这个字段并用它来查找post,因为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 也许我需要使用其他类来访问我想要的东西?我很困惑,我知道这是一个拉维基地,但我真的不能围绕这个简单的问题我的头。

niknxzdl

niknxzdl1#

您不应该在那里使用一个字母的变量和太多的嵌套函数:

/**
 * 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查询,您需要自己编写翻译。这并不难。

相关问题