Запрос записей, на которые есть ссылки в другой таблице из модели в красноречивом

#laravel #eloquent #laravel-8

#ларавель #красноречивый #ларавель-8

Вопрос:

У меня есть две модели, Приз и Билет. С призом связано много билетов, есть также winner_ticket_id связь «один к одному».

Теперь я пытаюсь запросить все мои билеты, но только те, которые указаны в качестве ticket_winner_id Приза.

Я использую следующий код:

 $tickets = Ticket::with('user')-gt;whereHas('prize', function ($query) {  $query-gt;where('ticket_winner_id'); })-gt;orderBy('created_at', 'DESC')-gt;paginate(30);  

Однако этот код выше возвращает все мои билеты, а не победителей. Может кто-нибудь показать, как я могу запрашивать только выигрышные билеты?

Я знаю, что было бы легко просто начать с приза и установить связь с колонкой «Победитель», но я хочу начать с коллекции билетов, чтобы я мог вставить это в некоторые многоразовые шаблоны лезвий.

Комментарии:

1. Где winner_ticket_id находится в таблице tickets или prizes ?

2. Извиняюсь, это в Prizes таблице

Ответ №1:

Лучше написать это именно так:

 Ticket::with('user')  -gt;innerJoin('prizes', 'prizes.ticket_winner_id', 'tickets.id')  -gt;orderBy('tickets.created_at', 'DESC')  -gt;paginate(30);  

И будет намного лучше, если вы добавите флаг в tickets таблицу, чтобы сообщить, что билет является победителем, или вы можете добавить prize_id его в tickets таблицу.

Надеюсь, это может решить проблему.