#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
напрямую