2016-03-01 25 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