Как я могу преобразовать запрошенный объект Laravel из запроса в int - PullRequest
1 голос
/ 24 мая 2019

Я получаю весь объект из базы данных, используя запрос Laravel и массив с простым запросом (см. Следующее изображение)

public function editgamemenu($id){
    $game = Game::find($id);
    $genres = Genre::all();
    $selectedgenres = DB::table('game_genre')->select('genre_id')->where('game_id','=',$id)->get()->toArray();

    returnview('editgametext')>with(compact('game','genres','selectedgenres'));

}

После этого я использую foreach для итерации вокруг объекта, чтобы попытаться увидеть, находится ли идентификатор объекта внутри массива, который я извлек ранее, но он выдает следующую ошибку: «Объект класса stdClass не может быть преобразован в int " Вот код просмотра:

<input type="hidden" value="{{$game->id}}" id="id" name="id">
<div class="form-group col-4">
  <p><strong>Genres:</strong></p>
  <div class="container">
  @foreach($genres as $genre)
    <span class="genre-list">
      <label>{{$genre->name}}</label>
      @if(in_array($genre,$selectedgenres))
      <input type="checkbox" name="genres[]" value="{{$genre->id}}" checked>
      @else
      <input type="checkbox" name="genres[]" value="{{$genre->id}}">

      @endif
    </span>
  @endforeach

Я уже пытался преобразовать $ genre-> id в int, но он не работает и некоторые другие вещи. Помощь будет оценена. Спасибо

Ответы [ 3 ]

1 голос
/ 24 мая 2019

У вас проблема здесь,

Вам нужно использовать pluck для получения только идентификаторов жанра, как показано ниже

$selectedgenres = DB::table('game_genre')->where('game_id','=',$id)->pluck('genre_id')->toArray(); // notice pluck to fetch all genre_ids for that game_id

В связи с этим вам нужно указать genre_id в массиве для регистрации $selectedgenres

@if(in_array($genre->id,$selectedgenres)) // you must pass genre_id here not an object
...... your code
@endif
1 голос
/ 24 мая 2019

Изменить

$selectedgenres = DB::table('game_genre')
    ->select('genre_id')
    ->where('game_id','=',$id)
    ->get()
    ->toArray();

На это

$selectedgenres = DB::table('game_genre')
    ->select('genre_id')
    ->where('game_id','=',$id)
    ->get()
    ->pluck('genre_id')
    ->toArray();

уведомление ->pluck('genre_id')

Без срыва у вас будет массив объектов.

Редактировать: Как заметил @quickSwap, в вашем блейд-файле вам также нужно изменить $genre на $genre->id

@if(in_array($genre->id, $selectedgenres))
    ....
@endif

Редактировать 2: Вы также можете воспользоваться Collection

$selectedgenres = DB::table('game_genre')
    ->where('game_id','=',$id)
    ->pluck('genre_id'); // returns a collection

И в твоем клинке

@if($selectedgenres->contains($genre->id))
0 голосов

Измените $selectedgenres = DB::table('game_genre')->select('genre_id')->where('game_id','=',$id)->get()->toArray(); на $selectedgenres = DB::table('game_genre')->select('genre_id')->where('game_id','=',$id)->pluck('genre_id'); и @if(in_array($genre,$selectedgenres)) на @if(in_array($genre->id,$selectedgenres))

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