从 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.

希望能解决。