Как написать PHP — код внутри шаблона блейда

#php #laravel

Вопрос:

В моем шаблоне лезвия Laravel у меня есть таблица, в которую я хочу добавить еще один столбец после этого кода

 <td>{{format_price($mission->amount)}}</td>
 

Я добавил это :

     @php
        $amount_to_be_collected = DB::table('shipments')
        ->select('amount_to_be_collected')
        ->where('mission_id', $mission->id)
        ->get();
    @endphp

<td>{{format_price($amount_to_be_collected)}}</td>
 

Что не так с этим кодом?

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

1. @groovy_guy нет никакой разницы (с точки зрения sql-инъекции) между кодом в блейде и кодом в контроллере. оба являются серверной стороной (если это то, о чем вы думаете).

2. $amount_to_be_collected это коллекция.

3. @Абделуахад Эльфихри было бы лучше, если бы вы упомянули о проблеме, с которой вы столкнулись, с чем-нибудь ошибочным?

4. @groovy_guy он все еще не открыт для SQL-инъекции, так как он использует красноречивый конструктор запросов, а не необработанный оператор. Нахождение в блейде или контроллере не имеет ничего общего с этим типом уязвимостей

5. @groovy_guy да, использование @php --- @endphp в блейде нехорошо, а вводить запрос в блейд очень плохо. но это не имеет ничего общего с SQL-инъекцией

Ответ №1:

Прежде всего, вы не должны помещать код запроса БД в свой блейд.

Теперь, когда вы выполняете запрос с помощью eloquent и вызываете get() , ответ представляет собой Collection::class экземпляр, который можно рассматривать как массив, но не может быть автоматически преобразован в число/строку.

Если вам нужно значение поля on только для одной записи, используйте value() вместо этого.

 $amount_to_be_collected = DB::table('shipments')
    ->where('mission_id', $mission->id)
    ->value('amount_to_be_collected');
 

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

1. спасибо миллионы раз, брат, это работает

Ответ №2:

Примечание: Не рекомендуется использовать запросы к БД в блейд-представлениях, вы также можете использовать помощника

Попробуйте это перед использованием фасада БД, вам нужно вызвать этот класс в представлении блейда, выполняющем запросы к базе данных

 use IlluminateSupportFacadesDB;
 

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

1. У Laravel есть псевдоним для фасада БД в корневом пространстве имен, который вы можете использовать DB напрямую