Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 17.09.2016 19:31:21

Update и подготовленные запросы

приветствую! Объясните один момент
Я так понял что 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 постоянно разбирает запрос и все с этим связанное. Подскажите как от этого уйти плиз

Спасибо!

Не в сети

#2 17.09.2016 21:08:49

Re: Update и подготовленные запросы

можно только это уже не ОРМ будет

Не в сети

#3 17.09.2016 21:09:59

Re: Update и подготовленные запросы

если у тебя работа с одним объектом (строкой бд), то работай конкретно с ней.
не надо смешивать червей и улиток в одном яблоке, а то шейк будет, а не яблоко.

Не в сети

#4 17.09.2016 22:30:33

Re: Update и подготовленные запросы

т.е. делаем вывод гоняй через foreach и все норм?

Не в сети

#5 18.09.2016 00:03:40

Re: Update и подготовленные запросы

по сути да. гоняй в foreach коллекцию, полученную через Book::where()->get()

Не в сети

#6 18.09.2016 17:05:48

Re: Update и подготовленные запросы

Вот тоже хотел задать такой вопрос. К примеру у меня есть команда участников, я беру их так:
   $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 запросов, это почти секунду будет выполнятся.

Не в сети

#7 18.09.2016 17:13:28

Re: Update и подготовленные запросы

> Так получается правильно?
да.
и не надо никому придумывать сложные алгоритмы.
чем проще сделал - тем проще живёшь

Не в сети

#8 18.09.2016 17:14:33

Re: Update и подготовленные запросы

а вот тема оптимизации производительности - отдельная тема.
но показанное решение вполне правильное.

Не в сети

#9 18.09.2016 17:28:12

Re: Update и подготовленные запросы

hzone пишет:

>
чем проще сделал - тем проще живёшь

После foreach идет return redirect('/arena'); и получается что страница уже обновилась, а база еще обновляется, и после редиректа выводятся лжеданные, пришлось перед редиректом ставить задержку  не большую.
usleep(200000);
return redirect('/arena');

Не в сети

#10 18.09.2016 22:32:19

Re: Update и подготовленные запросы

1. бд работает быстрее чем ты думаешь
2. рнр хоть и ооп но всё равно процедурный язык. тоесть пока бд не обновится возврата не произойдёт.
а если нет, то проблема в структуре бд, индексах итп. всё лечится прямыми, ну ты понял. ;-)

Не в сети

Подвал раздела