Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Ну вот массив
protected $fillable = ['id', 'created_at', 'updated_at','bb'];
А надо чтоб вообще все текущие и будущие поля сразу были доступны для заполнения.
Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20
Не в сети
Удали объявление $fillable и добавь
protected static $unguarded = true;
Но это опасно.
Не в сети
Я больше советую использовать метод статичный unguarded, например:
/** @var Post $post **/
$post = Post::findOrFail(1);
Post::unguarded(function () use ($request, $post) {
$post->fill($request->all())->save();
});
Но это опасно.
https://laravel.ru/forum/viewtopic.php?pid=10319#p10319
Не в сети
Удали объявление $fillable и добавь
protected static $unguarded = true;
вот это выдаёт
preg_replace(): Parameter mismatch, pattern is a string while replacement is an array
Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20
Не в сети
А второй вариант обработанный
use Illuminate\Database\Query\Builder;
$post = YourModelName5::findOrFail($id);
YourModelName5::unguarded(function () use ($request, $post) {
$post->fill($request->all())->save();
});
Выдаёт
Call to undefined method Illuminate\Database\Query\Builder::unguarded()
Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20
Не в сети
Удали объявление $fillable и добавь
protected static $unguarded = true;
лучше сразу отдай обезьяне ядерную бомбу.
Не в сети
covobo пишет:Удали объявление $fillable и добавь
protected static $unguarded = true;
лучше сразу отдай обезьяне ядерную бомбу.
Это что, делает все поля доступными для массового заполнения?
Не в сети
Выдаёт
Call to undefined method Illuminate\Database\Query\Builder::unguarded()
кхм, сам не проверял, смотрел исходники.
Есть ещё один метод - forceFill, который делает тоже самое (использует статичный метод unguarded())
$post->forceFill($request->all())
Не в сети
Не работает почему-то. Ошибок не выдаёт, но и значения не обновляет.
Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20
Не в сети
Ставлю и с $unguarded и без, полями и без, всё равно ничё не происхоидт и ошибки нет. Работает ток update, но для него нужны поля.
// protected static $unguarded = true;
//protected $table = 'your_model_name5s';
protected $fillable = ['bb2','bb'];
//
////////////
YourModelName5::find($id)->update($request->all());
YourModelName5::find($id)->forceFill($request->all());
Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20
Не в сети
после ->forceFill() надо делать ->save()
$post->forceFill($request->all())->save();
ну, или, на совсем крайний случай
foreach ($request->all() as $fieldName => $fieldValue) {
$post->setAttribute($fieldName, $fieldValue);
}
$post->save();
Изменено covobo (30.11.2016 21:28:42)
Не в сети
Ребят, не изобретайте велосипедов, используйте $fillable. Зачем создавать проблемы на пустом месте себе/заказчику/человеку, который будет поддерживать проект?
Не в сети
Ребят, не изобретайте велосипедов, используйте $fillable. Зачем создавать проблемы на пустом месте себе/заказчику/человеку, который будет поддерживать проект?
Может у него там вообще NoSQL бд.
Хочет - пускай делает)
Не в сети
Не в сети
}%> %%$post->forceFill($request->all())%%
Бгг, ну да, "решение". За такое к программированию на пушечный выстрел подпускать нельзя. Это позволяет переписать любые поля в Post, включая скрытые типа is_sticky, created_at, ... (конечно, список зависит от конкретной таблицы). Большущая дыра.
хардкодинг на фреймворке это )))))))))
И про дыру - даааааа. В голове дыра....
Изменено hzone (06.12.2016 14:23:31)
Не в сети
заминусовали.
Если автору надо - пускай делает, вам то какая разница.
Никто не заставляет вас использовать unguarded & forceFill.
Эти методы предоставляет сам Eloquent, отправляйте пул реквест с комментариями, что эти методы для дураков и их надо удалить.
ProgerXP - это кто дал тебе права решать за других, как можно, а как нельзя?
Изменено covobo (06.12.2016 15:33:07)
Не в сети
}%> %%$post->forceFill($request->all())%%
Бгг, ну да, "решение". За такое к программированию на пушечный выстрел подпускать нельзя. Это позволяет переписать любые поля в Post, включая скрытые типа is_sticky, created_at, ... (конечно, список зависит от конкретной таблицы). Большущая дыра.
Думаю зря вы так напали. $request - можно отфильтровать перед этим.
Proger_XP пишет:}%> %%$post->forceFill($request->all())%%
Бгг, ну да, "решение". За такое к программированию на пушечный выстрел подпускать нельзя. Это позволяет переписать любые поля в Post, включая скрытые типа is_sticky, created_at, ... (конечно, список зависит от конкретной таблицы). Большущая дыра.Думаю зря вы так напали. $request - можно отфильтровать перед этим.
Да и в целом - какой вопрос, такой и ответ.
Не в сети
Действительно. Kirir весь форум испакостил вопросами, за которые его в серьезной конторе и дня бы не продержали. А, конкретно, здесь, он спросил - получил ответ, с предупреждением, причем не одним.
Не в сети
- ProgerXP — это кто дал тебе права решать за других, как можно, а как нельзя?
Человек может как угодно извращаться, я ничего никому не запрещаю. Но форум это не приватная беседа для двоих. Сюда зайдут такие же новички, которые ищут ответы на вопросы, увидят ваши «решения», запомнят и понесут в свои проекты.
Повторяю — forceFill, unguarded, … это огромная проблема. Вот у вас пистолет с предохранителем. Вы его видите в первый раз, и так и эдак крутите — не стреляет. Тут кто-то говорит «да дёрни ты вон ту штучку». Вы дёргаете и попадаете себе/советнику в ногу/руку/голову. То есть начальных знаний у вас нет, вам дали быстрое и лёгкое решение, за что вы и поплатились. И ладно если только вы.
Здесь тоже самое. Простейший пример — форма регистрации:
xml<form action="reg"> <input name="login"> <button type="submit">Reg</button> </form>
id is_admin login ...
В нормальном случае адрес запроса:
/reg?login=my_login
Но запрос целиком контролируется клиентом, поэтому он может выглядеть так:
/reg?login=my_login&is_admin=1
В итоге если у вас там всё fillable, то вы вставляете в таблицу запись с is_admin = 1, что делает нового пользователя админом на сайте.
Неужели не понятно, чем это грозит?
Кто думает, что это всё теория и в реальном мире никогда не происходит — ошибается. Два года назад был нашумевший случай с GitHub’ом (Хабр), когда человек смог сделать коммит в репо, даже не имея прав на запись туда, просто добавив в форму лишнее поле. То есть один-в-один этот случай.
Не в сети
Неужели не понятно, чем это грозит?
Мне кажется это и так понятно всем. Настолько понятно, что и говорить нет смысла.
Вы думаете никто здесь не понимает, что это плохо?
Если он хочет стрельнуть себе в ногу - пускай.
Изменено covobo (06.12.2016 18:31:16)
Не в сети
По поводу новичков - в комментариях были предупреждения.
Не пойму, зачем было редактировать мои комментарии и говорить, что так нельзя, ведь я просто ответил на вопрос.
Не в сети
- Не пойму, зачем было редактировать мои комментарии и говорить, что так нельзя, ведь я просто ответил на вопрос.
Я уже написал почему. Люди видят решение и дальше не читают.
- Вы думаете никто здесь не понимает, что это плохо?
Если даёте заведомо опасное решение — говорите зачем, что и почему, ибо кто понимает, что это плохо, таких вопросов не задаёт.
Сделал свои правки менее категоричными, но учтите на будущее.
Не в сети