在 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_id
在tickets
或prizes
表中的位置?
抱歉,在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 Eloquent vs DB 查询追加