在 Eloquent 中从模型中查询另一个表中引用的记录

Posted

技术标签:

【中文标题】在 Eloquent 中从模型中查询另一个表中引用的记录【英文标题】:Querying records that are referenced in another table from model in Eloquent 【发布时间】:2022-01-16 00:17: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 表中 【参考方案1】:

最好这样写:

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

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

希望这可以解决。

【讨论】:

以上是关于在 Eloquent 中从模型中查询另一个表中引用的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eloquent ORM 中从 JSON 中保存具有相关记录的模型

Laravel中从一个表到另一个表中的同一字段的多个外键

讨论:Laravel Eloquent vs DB 查询追加

如何从原始对象创建一个Eloquent模型实例?

根据另一个 eloquent 查询的结果在循环中运行 eloquent 并在刀片中显示列表

laravel 基础教程 —— Eloquent