где делать в Laravel 5.4 - PullRequest
       8

где делать в Laravel 5.4

0 голосов
/ 15 апреля 2019

Этот вопрос о том, как мне реализовать область, в которой пользователь будет запрашивать вознаграждение на определенном уровне, и как только он получит свои вознаграждения, в поле вознаграждения больше не будет отображаться вознаграждение, которое они потребовали.Так, например:

Пользователь находится на уровне 20, на его панели вознаграждений есть 3 доступных награды, требующих получения, уровня 10, 15 и 20. Таким образом, если пользователь получил награду уровня 10, он будетбольше не отображается на панели, за исключением наград 15 и 20 уровня.

Вот код для клинка:

 @foreach(App\LevelRewards::getRewards()->get() as $rewards)
 @if(Auth::user()->level >= $rewards->level_required || Auth::user()->level == $rewards->level_required)
    @if(App\ClaimReward::claimLevel()->get())
            <div class="col-lg-2 col-md-3 col-sm-6 col-xs-6" style="margin: 5px 0px;">
               <div class="hovereffect">
                    <a href="#" class="d-block mb-4 h-100">
                   <input type ="hidden" name="id" value="{{$rewards->id}}"/>
                   <img class="img-responsive" src="{{asset('rewards_img/'.$rewards->picture)}}" alt="">
                    </a>
                <div class="overlay">
                 <h2 style="font-size: 14px;">{{$rewards->details}}</h2>
                 @if($rewards->type == 'physical')
                 <button type="button" class="btn btn-success btn-sm" data-toggle="modal" data-target="#claimPhysical" data-details="{{$rewards->details}}" data-id="{{$rewards->id}}" data-level="{{$rewards->level_required}}" data-physical="{{$rewards->item_name}}">
                CLAIM
                </button>
                @else
                <button type="button" class="btn btn-success btn-sm" data-toggle="modal" data-target="#claimDigital" data-id="{{$rewards->id}}" data-level="{{$rewards->level_required}}" data-physical="{{$rewards->item_name}}">
                CLAIM
                </button>
                @endif
      </div>
    <div style="background: #2d2d2d; padding: 9px;">
         <span class="credits_top">Required Level: <span>{{$rewards->level_required}}</span></span>
         <p>{{$rewards->item_name}}</p> 
    </div> 
</div>                                                                  
   @endif
  @endif
@endforeach

А это код модели ClaimReward для модели:

public function scopeClaimLevel2($query)
{
    return $query->join('level_rewards','level_rewards.id','=','claim_rewards.reward_id')->select('level_rewards.*');
}

Будем весьма благодарны за любые ссылки и источники информации по этому вопросу.Спасибо.

Редактировать: я пытался;

public function scopeClaimLevel($query)
{
    return $query->join('claim_rewards','claim_rewards.reward_id','=','level_rewards.id')->select('level_rewards.*');
}
public function scopeGetRewards($query)
{
    return $query
    ->join('claim_rewards','claim_rewards.reward_id','=','level_rewards.id')
    ->whereDoesntHave('claimLevel', function (Builder $query) {
           $query->where('claim_rewards.status', '=', '0');
     }) 
    ->select('level_rewards.*');
}

Но там написано: вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: getRelated () '

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

относительно комментариев выше,

и после вашего редактирования того, что вы пытались,

похоже, что порядок запроса неправильный ... поместите whereDoesntHave перед выбором,

и перейдите к реализации, как написано в примере документации Laravel.

попробуйте это:

public function scopeClaimLevel2($query)
{
    return $query
      ->join('claim_rewards','claim_rewards.reward_id','=','level_rewards.id')
      ->whereDoesntHave('claim_rewards', function (Builder $query) {
             $query->where('status', '=', '0');
       }) 
      ->select('level_rewards.*');    

}

edit:

tryчтобы изменить объединение, как написано здесь: https://laravel.com/docs/5.4/queries#joins

построить объединение и в его функции установить, как присоединиться и где статус = 0

return $query
      ->join('claim_rewards', function ($join) {
          $join->on('claim_rewards.reward_id', '=', 'level_rewards.id')->where('status', '=', '0');
      })
      ->select('level_rewards.*');
0 голосов
/ 15 апреля 2019

добавить еще одну таблицу, которая будет содержать награды, уже заявленные пользователем,

и в проверке foreach, существует ли этот идентификатор вознаграждения в заявленных пользователем вознаграждениях,

если не так, покажите это, и если да, то пропустите.

таблица будет содержать 2 поля:

1) user_id

2) rewards_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...