2016-03-01 23 views
1

我将我的视图传递给一个集合。如果我输出这个数组,我得到这样的东西Laravel 5 - 在View中循环收集的奇怪行为

array:2 [▼ 
    0 => array:8 [▼ 
    "id" => "53" 
    "name" => "creativeOption" 
    "label" => "checkboxSelection" 
    "value" => "Animated GIF" 
    "campaignCreativesId" => "21" 
    "deleted_at" => null 
    "created_at" => "2016-03-01 13:52:36" 
    "updated_at" => "2016-03-01 13:52:36" 
    ] 
    1 => array:8 [▼ 
    "id" => "54" 
    "name" => "creativeOption" 
    "label" => "Other" 
    "value" => "12345" 
    "campaignCreativesId" => "21" 
    "deleted_at" => null 
    "created_at" => "2016-03-01 13:52:36" 
    "updated_at" => "2016-03-01 13:52:36" 
    ] 
] 

基本上,我有几个复选框的选择。如果选中了其他复选框,则会显示文本区域以获取更多详细信息。在我看来,我做了以下

@foreach($campaign->campaignCreatives->campaignCreativesData as $data) 
    @if($data->label == 'Other') 
     {{dd($data->value)}} 
     <div class="col-md-12 noPadding" id="cOtherText"> 
      {!! Form::textarea('otherInput', $data->value, array('placeholder' => 'Please provide some additional information')) !!} 
     </div> 
    @else 
     <div class="col-md-12 noPadding" id="cOtherText"> 
      {!! Form::textarea('otherInput', null, array('placeholder' => 'TEST')) !!} 
     </div> 
    @endif 
@endforeach 

我基本上做的是检查,看看是否有此集合命名为其它标签。如果有,我想用旧输入显示文本区域。如果没有名为Other的标签,我只需要显示一个空白的textarea。

现在与上述,你可以看到我已经在if语句中放置了一个dd。这是我发现奇怪的。使用上面的数组/集合,if应该被使用,因为有一个名为Other present的标签。正如我所料,dd被解雇了。 dd输出“12345”,这是之前添加到此textarea的数据。所以如果我删除这个dd,我会期望textarea在其中显示12345。

但是,我似乎在else语句中显示textarea。我知道这个textarea被显示的原因是因为我将占位符设置为TEST,这是我在textarea中看到的。

因此,即使if语句被满足,为什么它会显示第二个textarea?

+1

该代码似乎是正确的。你尝试过使用@if($ data-> label ===“Other”)吗? – Laerte

+0

是的,由于某种原因结果相同。两个条件如何满足?似乎没有意义 –

+0

实际上,我已经在这里测试了这段代码,而且我似乎工作得很好......如果你在'@ if'之前加入'{{dd($ data)}},它会打印什么? – Laerte

回答

2

如果我明白你需要什么,我会尝试做这样的事情:

@if ($campaign->campaignCreatives->campaignCreativesData->contains('label', 'Other')) 
    <div class="col-md-12 noPadding" id="cOtherText"> 
     {!! Form::textarea('otherInput', 
         $campaign->campaignCreatives->campaignCreativesData->where('label', 'Other')->first()->value, 
         array('placeholder' => 'Please provide some additional information')) !!} 
    </div> 
; 
@else 
    <div class="col-md-12 noPadding" id="cOtherText"> 
     {!! Form::textarea('otherInput', null, array('placeholder' => 'TEST')) !!} 
    </div> 
@endif 

我没有测试它,那么,告诉我,如果它的工作原理。

+0

谢谢,完美的作品。有趣的是,我刚刚在几分钟前提出了自己的解决方案,但它比您提供的更漫长。谢谢 –

+1

我很高兴能够帮助你! :) – Laerte