Почему я не могу ЗАКАЗАТЬ в сводной таблице Laravel Eloquent? - PullRequest
0 голосов
/ 26 января 2019

Я курирую свою таблицу posts на главной странице, чтобы показывать только те сообщения, которые я выбрал.

Когда я выбираю сообщение для домашней страницы, его идентификатор попадает в таблицу posts_homepage, которая в основном является сводной таблицей. Я выбираю идентификатор сообщения (post_id) из posts_homepage, а затем получаю сообщения из таблицы posts.

Это работает очень хорошо, однако теперь я хочу расположить их в определенном порядке, поэтому я добавил поле order_by к posts_homepage. Мне трудно понять, как получить результат в нужном мне порядке, ничего не получается; Я просто получаю их в порядке по умолчанию.

TABLE posts_homepage
post_id    INT 10 UNSIGNED
order_by INT 10 UNSIGNED

Текущий запрос ...

$posts = Post::latest('published_at')
    ->whereHas('user', function ($query) {
        $query->where('verified', 1);
    })
    ->whereRaw("posts.id IN (SELECT post_id FROM posts_homepage)")
    ->whereRaw("posts.status = 'published'")
    ->paginate(30);

Я пытался удалить latest('published_at') и вставить ->orderByRaw('ORDER BY posts_homepage.order_by ASC'), но это не имело значения, или я получил бы сообщение об ошибке Unknown column 'posts_homepage.order_by' in 'order clause'

Я тоже попробовал ->whereRaw("posts.id IN (SELECT post_id FROM posts_homepage ORDER BY order_by ASC)"), но это тоже не сработало. Я также попробовал несколько других вариантов, но не могу вернуть их, основываясь на поле order_by

Есть предложения?

1 Ответ

0 голосов
/ 26 января 2019

Поправь меня, если я ошибаюсь, но разве здесь не сработает простое соединение? Например:

$posts = Post::select('posts.*')
    ->whereHas('user', function ($query) {
        $query->where('verified', 1);
    })
    ->join('posts_homepage', 'posts.id', 'posts_homepage.post_id')
    ->where('posts.status', 'published')
    ->orderBy('posts_homepage.order_by', 'ASC')
    ->paginate(30); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...