Laravel 5 - 在View中循环收集的奇怪行为

时间:2016-03-01 13:42:26

标签: php laravel laravel-5 laravel-5.1

我将视图传递给我。如果我将其输出为数组,我会得到类似的结果

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的标签。如果有,我想用旧输入显示文本区域。如果没有名为Other的标签,我只需要显示一个空白的textarea。

现在有了上述内容,您可以看到我在if语句中放置了一个dd。这就是我发现的奇怪。使用上面的数组/集合,应该使用if,因为有一个名为Other present的标签。正如我所料,dd被解雇了。 dd输出&#34; 12345&#34;这是以前添加到此textarea的数据。所以如果我删除这个dd,我希望textarea在其中显示12345。

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

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

1 个答案:

答案 0 :(得分: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

我还没有测试过,所以,告诉我它是否有效。