【问题标题】:Querying records that are referenced in another table from model in Eloquent在 Eloquent 中从模型中查询另一个表中引用的记录
【发布时间】:2025-11-29 17:50:01
【问题描述】:

我有两个模型,奖品和门票。奖品有很多票与之关联,还有一个winner_ticket_id,这是一对一的关系。

现在我要做的是查询我的所有门票,但只查询奖品中被称为ticket_winner_id 的门票。

我正在使用以下代码:

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

但是,上面的代码会带回我的所有门票,而不是赢家。谁能告诉我如何只查询中奖彩票?

我知道从 Prize 开始并与获胜者列建立关系很容易,但我想从 Ticket 集合开始,这样我就可以将其注入到一些可重复使用的刀片模板中。

【问题讨论】:

  • winner_ticket_idticketsprizes 表中的位置?
  • 抱歉,在Prizes 表中

标签: laravel eloquent laravel-8


【解决方案1】:

最好这样写:

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

如果您在tickets 表中添加一个标志来告诉您彩票是赢家,或者您可以在tickets 表中添加prize_id,那会更好。

希望这可以解决。

【讨论】:

    最近更新 更多