#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
таблицу.
Надеюсь, это может решить проблему.