在eloquent中为用户查找竞价

时间:2015-08-08 18:26:18

标签: php laravel laravel-4 laravel-5

我正在使用L5和elentint
我的桌子结构是..
用户
ID
其他领域
拍卖
 ID
 其他领域
大量
 ID
 auction_id
 其他领域
lot_user
 lot_id
 USER_ID
我想为用户找到拍卖 我该怎么办?

$user = User::find($id);
$auctions = $user->auctions();

3 个答案:

答案 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();