从 Eloquent 中的模型查询另一个 table 中引用的记录
Querying records that are referenced in another table from model in Eloquent
我有两个模型,Prize 和Ticket。 Prize 有很多 Tickets 与之关联,还有一个 winner_ticket_id
这是一个 one-to-one 关系。
现在我要做的是查询我所有的门票,但只查询那些在 Prize 中被引用为 ticket_winner_id
的门票。
我正在使用以下代码:
$tickets = Ticket::with('user')->whereHas('prize', function ($query) {
$query->where('ticket_winner_id');
})->orderBy('created_at', 'DESC')->paginate(30);
然而,上面的代码带回了我所有的门票,而不是中奖者。有人可以告诉我如何只查询中奖彩票吗?
我知道从 Prize 开始并与 winner 列建立关系很容易,但我想从 Ticket collection 开始,所以我可以将其注入一些可重用的 blade 模板。
这样写比较好:
Ticket::with('user')
->innerJoin('prizes', 'prizes.ticket_winner_id', 'tickets.id')
->orderBy('tickets.created_at', 'DESC')
->paginate(30);
如果你在 tickets
table 中添加一个标志来告诉你彩票是赢家,那就更好了,或者你可以在 tickets
中添加 prize_id
] table.
希望能解决。
我有两个模型,Prize 和Ticket。 Prize 有很多 Tickets 与之关联,还有一个 winner_ticket_id
这是一个 one-to-one 关系。
现在我要做的是查询我所有的门票,但只查询那些在 Prize 中被引用为 ticket_winner_id
的门票。
我正在使用以下代码:
$tickets = Ticket::with('user')->whereHas('prize', function ($query) {
$query->where('ticket_winner_id');
})->orderBy('created_at', 'DESC')->paginate(30);
然而,上面的代码带回了我所有的门票,而不是中奖者。有人可以告诉我如何只查询中奖彩票吗?
我知道从 Prize 开始并与 winner 列建立关系很容易,但我想从 Ticket collection 开始,所以我可以将其注入一些可重用的 blade 模板。
这样写比较好:
Ticket::with('user')
->innerJoin('prizes', 'prizes.ticket_winner_id', 'tickets.id')
->orderBy('tickets.created_at', 'DESC')
->paginate(30);
如果你在 tickets
table 中添加一个标志来告诉你彩票是赢家,那就更好了,或者你可以在 tickets
中添加 prize_id
] table.
希望能解决。