在foreach laravel外面使用变量

时间:2016-04-12 18:49:11

标签: php laravel foreach

我对Laravel有疑问。那我该怎么办呢?我试图从我的所有例子中获取位置。这实际上是有效的,所以你可以看到我得到所有例子的id并从我项目中的另一个表中找到它的位置。 foreach中的var_dump给出了我需要的东西。但是我需要在foreach之外的这些数据,之后我需要将它发送到我的视图中。但是第二个var_dump,foreach之外的那个只给出了第一个id的位置。

所以我的问题是:有没有办法在foreach之外获得完整的$位置。

$ids= DB::table('example')
            ->select('id')
            ->get();

        foreach($ids as $id)
        {
            $locations = example::find($id->id)->locations()->get();
            var_dump($locations);
        }

        var_dump($locations);

这是我的观点:

 @foreach($examples as $example)
   <h1>{{$example->name}}</h1>
   @foreach($locations as $location)
     {{$location}}
   @endforeach
@endforeach

如果按照这样的方式打印,我会看到每个$示例中的$ examples的位置,我希望你理解我的问题。

2 个答案:

答案 0 :(得分:3)

试试这个:

// Define locations array
$locations = [];

// Then do the following for each example:

// Define the array for locations of each example outside of the loop
$locations[$example->name] = [];

foreach ($ids as $id) {
    // Add each location to the $locations array
    $locations[$example->name][] = example::find($id->id)->locations()->get();
}

或者,如果您想要更加花哨一点,可以使用array_map代替foreach

$locations[$example->name] = array_map(function ($id) {
    return example::find($id->id)->locations()->get();
}, $ids);

然后在视图中,您只需从每个示例的右键中取出位置:

@foreach ($examples as $example)
    <h1>{{ $example->name }}</h1>
    @foreach ($locations[$example->name] as $location)
        {{ $location }}
    @endforeach
@endforeach

您不必使用$example->name作为密钥,只需确保它为您要为其获取位置的每个示例都是唯一的。

我希望这会有所帮助。

答案 1 :(得分:1)

无需构建$locations数组。您可以在视图中使用该关系。

在您的控制器中:

// whatever your logic is to get the examples
$examples = example::with('locations')->get();

在您看来:

@foreach($examples as $example)
    <h1>{{$example->name}}</h1>
    @foreach($example->locations as $location)
        {{$location}}
    @endforeach
@endforeach