/**
 * @param $auction DbAuction
 * @param $numBids int
 * @param $userIds array
 */
function makeBidsForAuction($auction, $numBids, $userIds)
{
    $faker = Faker\Factory::create();
    $startTime = new DateTime($auction->getField("startTime"));
    $endTime = new DateTime($auction->getField("endTime"));
    date_sub($endTime, date_interval_create_from_date_string("5 seconds"));
    $bidInterval = (int) (($endTime->getTimestamp() - $startTime->getTimestamp()) / $numBids);
    $price = (double) $auction->getField("startPrice");
    $userId = null;
    for ($i = 0; $i < $numBids; $i++) {
        $time = new DateTime('@' . ($startTime->getTimestamp() + $bidInterval * ($i + 1)));
        $price = $price + 0.5 * $faker->numberBetween(2, 10);
        $userId = $faker->randomElement($userIds);
        $bid = new DbBid(array("userId" => $userId, "auctionId" => $auction->getId(), "bidTime" => $time->format('Y-m-d H:i:s'), "bidPrice" => $price));
        $bid->create();
        $auction->setField("highestBid", $price);
    }
    $auction->setField("numBids", $numBids);
    $auction->setField("highestBidderId", $userId);
    $auction->save();
    //addViews($auction, $numBids);
}
/**
 * @param $auction DbAuction
 * @return mixed
 */
function getBuyerId($auction)
{
    $bids = DbBid::withConditions("WHERE `auctionId` =" . $auction->getId() . " ORDER BY `bidPrice` DESC")->getAsClasses();
    $highestBid = $bids[0];
    return $highestBid->getField("userId");
}
 public static function placeBid($auctionId, $userId, $bidPrice)
 {
     $date = new DateTime("now", new DateTimeZone(TIMEZONE));
     $bid = new DbBid(array("userId" => $userId, "auctionId" => $auctionId, "bidTime" => $date->format('Y-m-d H:i:s'), "bidPrice" => $bidPrice));
     $bid->create();
 }