Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
приветствую! Объясните один момент
Я так понял что Eloquent изначально использует prepare statement, если скажем вставить данные в модель через insert (например:
Book::insert($booksArr));
Я вот только не могу понять как производить обновление, так же используя подготовленные запросы?
Т.е. получается есть модель Book и мне нужно у книги с id=1 установить поле author = Иванов, а у книги с id=2 author = Петров
Как то можно это сделать одни запросом, без использования цикла? Что-то вроде:
Book::whereIn('id', $idsArr)->update($authorsArr);
мне не симпатизирует писать так:
foreach($idsArr as $id){
Book::where('id','=', $id)->update(['author'=>$authorsArr[$id]]);
}
При таком написании парсер slq постоянно разбирает запрос и все с этим связанное. Подскажите как от этого уйти плиз
Спасибо!
Не в сети
можно только это уже не ОРМ будет
Не в сети
если у тебя работа с одним объектом (строкой бд), то работай конкретно с ней.
не надо смешивать червей и улиток в одном яблоке, а то шейк будет, а не яблоко.
Не в сети
т.е. делаем вывод гоняй через foreach и все норм?
Не в сети
по сути да. гоняй в foreach коллекцию, полученную через Book::where()->get()
Не в сети
Вот тоже хотел задать такой вопрос. К примеру у меня есть команда участников, я беру их так:
$commands = ArenaMember::where('id', $arena_member->arena_id)->get();
Далее мне нужно, при определеных условиях, присвоить каждому участнику номер по порядку (1, 2, 3 ....), я делаю это так:
$command_num = 0;
foreach ($commands as $command) {
++$command_num;
$command->number = $command_num;
$command->save();
}
Так получается правильно? А если там к примеру тысячи 3 записей и это 3000 запросов, это почти секунду будет выполнятся.
Не в сети
> Так получается правильно?
да.
и не надо никому придумывать сложные алгоритмы.
чем проще сделал - тем проще живёшь
Не в сети
а вот тема оптимизации производительности - отдельная тема.
но показанное решение вполне правильное.
Не в сети
>
чем проще сделал - тем проще живёшь
После foreach идет return redirect('/arena'); и получается что страница уже обновилась, а база еще обновляется, и после редиректа выводятся лжеданные, пришлось перед редиректом ставить задержку не большую.
usleep(200000);
return redirect('/arena');
Не в сети
1. бд работает быстрее чем ты думаешь
2. рнр хоть и ооп но всё равно процедурный язык. тоесть пока бд не обновится возврата не произойдёт.
а если нет, то проблема в структуре бд, индексах итп. всё лечится прямыми, ну ты понял. ;-)
Не в сети
Страницы 1