PyroCMS(Laravel)翻译中的where子句无法正常工作

时间:2018-08-31 12:12:30

标签: mysql laravel where pyrocms

我一直为此苦苦挣扎。我使用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,也许我需要使用其他一些类来访问我想要的东西?我非常困惑,我知道这是一个幼稚的基础,但是我无法真正解决这个简单的问题。

1 个答案:

答案 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。并不困难。