我正在使用L5和elentint
我的桌子结构是..
的用户
ID
其他领域
的拍卖
ID
其他领域
的大量
ID
auction_id
其他领域
的 lot_user
lot_id
USER_ID
我想为用户找到拍卖
我该怎么办?
$user = User::find($id);
$auctions = $user->auctions();
答案 0 :(得分:2)
我有一个想法,以雄辩的方式做到这一点..
$auctions = $user->lots()
->join('auctions','auctions.id','=','lots.id')
->select(['auctions.*'])
->get();
答案 1 :(得分:0)
我不确定Eloquent在这方面会非常有效,但你可以这样做:
在您的用户类中,您需要定义多个关系,例如:
public function lots()
{
return $this->belongsToMany('App\Lot');
}
在您的Lot(s)课程中,您需要定义一对多关系的倒数,如:
public function auctions()
{
return $this->belongsTo('App\Auction')
}
然后,为了获得用户的批次,您可以执行以下操作:
$user->lots();
要进行拍卖,您需要循环播放并为每个拍卖调用$ lot->拍卖(),然后按ID过滤以获得独特的拍卖。
这种情况下,使用数据库外观来构建查询可能更容易,而不是仅仅尝试使用Eloquent。
答案 2 :(得分:0)
关于DB facade。 原始查询将如下所示:
SELECT * FROM auctions AS a
INNER JOIN lots AS l ON (l.auction_id = a.id)
INNER JOIN lot_user AS lu ON (lu.lot_id = l.id AND lu.user_id = $findUserId)
GROUP BY a.id
使用query-builder可以这样做:
DB::table('auctions')
->join('lots', 'lots.auction_id', '=', 'auctions.id')
->join('lot_user', function ($join) {
$join->on('lot_user.lot_id', '=', 'lots.id')
->where('lot_user.user_id', '=', $findUserId);
})
->groupBy('auctions.id')
->get();