我的网站上有一个抽奖系统。现在数据库中有2个抽奖,但是由于某种原因,在抽奖页面上仅显示最后创建的抽奖。我的代码是:
public function raffling()
{
parent::setTitle('Items raffling | ');
$green_ticket = \DB::table('users')->where('id', $this->user->id)->value('green_ticket');
$kolvo=\DB::table('giveaway_items')->where('status',0)->orderBy('id', 'desc')->count();
$giveaway = Giveaway::orderBy('id', 'desc')->first();
$giveaway_users = \DB::table('giveaway_users')
->where('giveaway_id', $giveaway->id)
->join('users', 'giveaway_users.user_id', '=', 'users.id')
->get();
$giveAway = Giveaway::where('winner_id', '!=', 'NULL')->orderBy('created_at', 'DESC')->first();
$user = User::find($giveAway->winner_id);
$username = $user->username;
$userava = $user->avatar;
$usersteamid = $user->steamid64;
return view('pages.raffling', compact('kolvo', 'giveaway', 'giveaway_users', 'giveAway', 'user', 'username',
'userava', 'usersteamid', 'green_ticket'));
}
我尝试在$giveaway = Giveaway::orderBy('id', 'desc')->first();
进行更改,而不是first()
使用take(2)
,但是我收到了错误Undefined property: Illuminate\Database\Eloquent\Builder::$winner_id
。如果我将take(2)
添加到$giveAway = Giveaway::where('winner_id', '!=', 'NULL')->orderBy('created_at', 'DESC')->first();
行而不是first()
,则会出现相同的错误。
我的问题在哪里,我该如何解决此错误?
take()
是集合上可用的方法,而不是查询生成器。您需要先从查询生成器中获取一个集合,然后在其上使用方法。
$giveAway = Giveaway::where('winner_id', '!=', 'NULL')
->orderBy('created_at', 'DESC')
->get()
->take(2);
使用first()
方法意味着只检索一条记录。
现在,正如您所说的,您希望从数据库中获得两条记录。这里有两种方法。
1)take()
$giveaway = Giveaway::orderBy('id', 'desc')->take(2)->get();
2)limit()
$giveaway = Giveaway::orderBy('id', 'desc')->limit(2)->get();
*由于未使用get()
方法,因此出现了您的问题。
使用take(2)
$giveaway = Giveaway::orderBy('id', 'DESC')->take(2)->get();