Не показывать, если 1 переменная равна 0, а другая пуста в laravel

#laravel #if-statement #conditional-statements

#laravel #if-оператор #условные операторы

Вопрос:

Я не знаю, почему я не могу заставить это условие работать. Сначала я покажу вам, что каждая таблица может быть foreach.

 @foreach( $w1ProductHistory as $w1ph )
    @php
    $totalCost = $w1ph->orderItem->cost * $w1ph->stock_in_qty;
    @endphp
    @if($w1ph->stock_in_qty!='0' amp;amp; $w1ph->delivery_note!='')
    <tr>
        <td>{{$w1ph->orderItem->product_code}}</td>
        <td>{{$w1ph->orderItem->product_name}}</td>
        <td><a href="{{ URL('/orders/'.$w1ph->order->id)}}" class="text-info">{{$w1ph->order->purchase_no}}</a></td>
        <td>{{$w1ph->delivery_date}}</td>
        <td>{{$w1ph->companies->comp_name}}</td> 
        <td>{{$w1ph->orderItem->cost}}</td>
        <td>{{$w1ph->stock_in_qty}}</td>
        <td>{{number_format($totalCost)}}</td>
        <td>
            @if(isset($w1ph->delivery_note))
                <a data-placement="left" data-toggle="tooltip" title="Delivery Notes: {{$w1ph->delivery_note}}" href="{{-- {{ route('orders.edit',$order->id) }} --}}" class="btn btn-sm btn-icon btn-default"><i class="fab fa-readme"></i></a>
            @endif
        </td>
    </tr>
    @endif
@endforeach
  

Что я пытаюсь сделать, так это скрыть, если только $ w1ph-> stock_in_qty!=’0 и $ w1ph-> delivery_note!=».

если $w1ph-> stock_in_qty!=’0 но $ w1ph-> delivery_note!=» имеет значение, строка должна отображаться.

Я уже пробовал @if($w1ph->stock_in_qty!='0' amp;amp; $w1ph->delivery_note!='') , @if($w1ph->stock_in_qty!='0' amp;amp; !empty($w1ph->delivery_note)) даже изменив «amp;amp;» на и . тем не менее, он скрывает строку, даже если выполнено только одно условие.

Опять же, я пытаюсь скрыть строку, только если оба условия не удовлетворяют ни одному из них. Как я могу этого добиться? заранее спасибо!

Ответ №1:

Является ли полностью законным кодом наличие тегов @php в файле blade, но вы могли бы пересмотреть, если вам действительно нужно сделать это таким образом.

Почему? Потому что это делает ваш блейд-файл более чистым, и вы должны стремиться к сохранению блейд-файлов без какой-либо другой логики, кроме получения атрибутов / связей. Также, если вам нужно выполнить это вычисление в каком-либо другом месте вашего приложения, у вас есть это в модели, и если алгоритм, лежащий в основе значения, изменится, вам просто нужно изменить его в одном месте.

Лучшим решением, по моему мнению, является определение атрибута в вашей модели ProductHistory (?), который дает вам это значение, и просто выполните $w1ph-> TotalCost;

Также я бы добавил атрибут, который возвращает логическое значение в зависимости от того, нужно вам показывать этот элемент в таблице или нет, что-то вроде $w1ph-> showInTable / visible / showDisplay и т.д.

Вы пробовали обходиться без qutoes вокруг 0? или count($w1ph—>stock_in_qty) == 0)?

Комментарии:

1. спасибо @kapalua, нет, я еще не сделал. Я попробую это сейчас. А также спасибо за этот совет, я сделаю это в следующий раз. на самом деле это моя первая попытка использовать фреймворки php. этот совет обязательно будет принят к сведению.

Ответ №2:

Я думаю, вы попробуете что-то вроде

     @if(count($w1ph->stock_in_qty)>0)amp;amp; (count($w1ph->delivery_note)>0))

@endif