使用foreach验证多值

时间:2017-04-28 20:33:26

标签: php laravel

我在表'游戏'中有一个列,其值为'1,2,3,4'

我现在想在'console'表中分析这些ID,检查它是哪个控制台。 只是不明白为什么,我只检查第一个值。

例如,如果我使用下面的代码,它只显示:“PS4”而不是“PS4 XONE PC”。

$games = \DB::table('games')
    ->where('id', '=', $info_games->id_game)
    ->get();
foreach ($games as $row) {
    $cons =  \DB::table('console')
        ->where('id', '=', $row->console)
        ->get();
}

刀片:

@foreach ($cons as $row)
 {{ $row->abb_cat }}
@endforeach

2 个答案:

答案 0 :(得分:1)

执行此操作时:

var searchResults = {
  page1: {
    item1: { id: 1 },
    item2: { id: 2 }
  },
  page2: {
    item3: { id: 3 },
    item4: { id: 4 }
  }
}

var innerObjects = Object
.keys(searchResults)
  .map(
    function(key, index) {
      return Object
        .keys(searchResults[key])
          .map(
            function(innerKey, index) {
              return searchResults[key][innerKey];
            }
          );
    });
//console.log(innerObjects);
var flattenedArray = [].concat.apply([], innerObjects);
//console.log(flattenedArray);
var idYoureLookingFor = 3;
var objectYouWant = flattenedArray.filter(function(obj) { return obj.id == idYoureLookingFor; });
console.log(objectYouWant);

你得到一个游戏,id = $games = \DB::table('games') ->where('id', '=', $info_games->id_game) ->get(); 。因此,当你进行foreach循环时,它只会循环一次,对于那个游戏。

现在,该游戏的$info_games->id_game属性值为console。在这段代码中:

'1,2,3,4'

当您引用foreach ($games as $row) { $cons = \DB::table('console') ->where('id', '=', $row->console) ->get(); } 时,您将获得该值$row->console。该值将转换为一个整数,用于在控制台表中查找id。由于1,2,3,4(int) '1,2,3,4',因此您只能获得一条记录。

您可以通过展开1值并将该数组与console一起使用来获取所有这些内容。

whereIn

更好的方法是正确规范数据库并在游戏和游戏机之间建立多对多的关系。

答案 1 :(得分:0)

看起来你正在迭代$games两次:第一次在你的php文件中,第二次在你的刀片中。在脚本中执行此操作时,每次迭代都会覆盖$cons。你想保存它们。

$list = [];

foreach ($games as $row) {
    $cons =  \DB::table('console')
        ->where('id', '=', $row->console)
        ->get();
    array_push($list, $cons);
}

然后将$list传递给您的刀片。

@foreach ($list as $cons)
 {{ $cons->abb_cat }}
@endforeach