Мое приложение создается на laravel 5.6
Ситуация:
У меня есть таблица под названием «members» со столбцом под названием «membersstatus_id».
варианты статуса: 4, 5 и 1
4 = активен, 5 = ожидает и 1 = срок действия истек
Цель: Я хочу обновить все активные (4) члена до ожидающих (5) и всех ожидающих истечения срока действия (1).
Решения, которые я пробовал: Пока что ниже показано то, что я пробовал безрезультатно.
// get all active and pending members
$members = Member::where('membershipstatus_id', 5)
->orWhere('membershipstatus_id', 4)
->get();
// bulk update with chunk of 200, if this is possible
$members->chunk(200, function($members)
{
foreach($members as $member)
{
// if status is pending, update to expire
if ($member->membershipstatus_id == 5)
{
$member->update(['membershipstatus_id' => 1]);
}
// if status is active, update to pending, i updated a small mistake here.
if ($member->membershipstatus_id == 5)
{
$member->update(['membershipstatus_id' => 4]);
}
}
}
);
return "update confirm";
Теперь, если у кого-то есть более чистый и быстрый способ сделать это, пожалуйста, дайте мне знать, я уверен, что я сделал там какую-то глупую ошибку. Пожалуйста, укажите мне правильное направление.
Ашиш
Да @mafortis, вы совершенно правы.
о каком? нужно выбрать вариант или просто кнопку?
Я думаю, что вы указали неправильное состояние и стоимость вашего второго if в вашем foreach
должен быть if ($member->membershipstatus_id == 4) { $member->update(['membershipstatus_id' => 5]); }, я думаю
моя беда, это была небольшая ошибка. редактирую это прямо сейчас
@DharmaSaputra Да, я исправил это. Я допустил эту ошибку, когда набирал вопрос. Приложение имеет тот же код, что и вы предлагаете.
@mafort - это просто кнопка, которую суперадминистратор нажимает для массового обновления без выбора пользователей, код повлияет на всех доступных пользователей.






Используйте конструктор запросов, например:
// update pending to expired
DB::table('members')
->where('membershipstatus_id', 5)
->update(['membershipstatus_id' => 1]);
// update active to pending
DB::table('members')
->where('membershipstatus_id', 4)
->update(['membershipstatus_id' => 5]);
возможно ли сделать что-то подобное ниже Member :: where ('membersstatus_id', 5) -> update (['membersstatus_id' => 1]);
Спасибо, приятель, решено с использованием Member вместо DB
Вы хотите просто иметь кнопку во внешнем интерфейсе, чтобы, когда вы нажимаете, происходят изменения, или вы хотите, чтобы возможность выбора пользователя, затем нажмите кнопку, и изменения произойдут?