PyroCMS (Laravel), где предложение в переводах не работает правильно - PullRequest
0 голосов
/ 31 августа 2018

Я уже давно борюсь с этим. Я использую 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 голосов
/ 01 сентября 2018

Вы не должны использовать однобуквенные переменные и слишком много вложенных функций:

/**
 * 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',
    ],

Чтобы использовать запрос к БД напрямую, вам нужно написать переводы join self. Это не так сложно.

...