Неопределенное свойство: Illuminate \ Database \ Eloquent \ Builder :: $ winner_id - PullRequest
0 голосов
/ 18 марта 2020

У меня есть система розыгрыша на моем сайте. Сейчас в базе данных 2 др aws, но по какой-то причине на странице розыгрыша отображается только последний созданный розыгрыш. Мой код:

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().

Где моя проблема, как я могу исправить эту ошибку?

Ответы [ 3 ]

1 голос
/ 18 марта 2020

Когда вы использовали first(), метод означает получение только одной записи.

Теперь, как вы сказали, вы хотите две записи из базы данных. Здесь есть два метода.

1) take ()

$giveaway = Giveaway::orderBy('id', 'desc')->take(2)->get();

2) limit ()

$giveaway = Giveaway::orderBy('id', 'desc')->limit(2)->get();

* Ваша проблема возникает потому что вы не использовали метод get().

1 голос
/ 18 марта 2020

использование take(2)

$giveaway = Giveaway::orderBy('id', 'DESC')->take(2)->get();
1 голос
/ 18 марта 2020

take() - это метод, который доступен в коллекциях, а не в построителе запросов. Сначала нужно получить коллекцию от построителя запросов, а затем использовать метод для этого.

$giveAway = Giveaway::where('winner_id', '!=', 'NULL')
    ->orderBy('created_at', 'DESC')
    ->get()
    ->take(2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...