【问题标题】:Eloquent max value of child's childchild 的孩子的 Eloquent 最大值
【发布时间】:2021-02-15 03:13:19
【问题描述】:

我有 3 张桌子

auctions [id, winner_user_id, title]
bids [id, auction_id, amount, user_id]
users [id, name]

关系

Auction
...
public function winningBidder(){
   return $this->belongsTo('User', 'winner_user_id', 'id');
}
public function bids(){
   return $this->hasMany('Bid');
}
User
...
public function bids(){
   return $this->hasMany('Bid');
}
Bid
...
public function auction(){
   return $this->belongsTo('Auction');
}
public function user(){
   return $this->belongsTo('User');
}

我想要做的是最高出价的获胜者

eager load
$auctions = Auction::with('winningBidder.bids')->get();

加载所有出价而不是该拍卖的出价,并将 max(amount) 添加到 about 将给出 max of all

是否有可能在每次拍卖中获得中标用户的最高出价?

【问题讨论】:

    标签: laravel laravel-5 eloquent


    【解决方案1】:

    如果您想在每次拍卖时立即加载 winningBidderswinningBid,您可以执行以下操作:

    在您的Auction 模型中添加一个新的one-to-one 关系以获得最高/中标:

    public function winningBid()
    {
        return $this->hasOne('Bid')->max('amount');
    }
    

    然后您可以执行以下操作:

    $auctions = Auction::with(['winningBidder', 'winningBid'])->get();
    

    【讨论】:

    • 出现错误 -> 在字符串上调用成员函数 addEagerConstraints()
    • @Creatix 是的,我的错误,当您急切加载多个关系时,您必须使用数组,如您所见here。我编辑了答案。
    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多