#php #mysql #sql #laravel
#php #mysql #sql #laravel
Вопрос:
У меня есть приведенный ниже код, работающий в laravel для моего приложения flutter. Хотя код работает нормально, однако я получаю ошибку HTTP 500 много раз, и этот код не выполняет команду. У меня около 30 тыс. строк в таблице «продукты», что вызывает ошибку HTTP 500. Влияет ли общее количество строк в таблице на выполнение кода, поскольку он выходит из строя 5-6 раз и работает 1-2 раза. Можно ли что-нибудь сделать, чтобы избежать ошибки HTTP 500, если строки в таблице превышают 10-20 тыс.
public function updateItem(Request $req){
$results = DB::table('products')->get()->where('id' , $req->input('product_id'));
foreach($results as $row) {
$stock_quantity = $row->stock_quantity;
}
if($stock_quantity >=$req->input('quantity')) {
$affected = DB::table('bag')->where('id', $req->input('id'))->update(['quantity' => $req->input('quantity'),
]
);
if($affected == 1) {
$response = array('message'=>"Bag item updated",'result'=>1);
return $response;
} else {
$response = array('message'=>"Error in updating", 'result'=>0);
return $response;
}
}else {
$response = array('message'=>"Stock not available", 'result'=>0);
return $response;
}
}
Комментарии:
1. MySQL не выдает HTTP-ошибки. Проверьте журналы ошибок HTTPD вашего сервера. Похоже, что вы можете превысить какой-то предел php.ini.
2. Обычно 20-30 тысяч строк — это ничто, когда речь заходит о базах данных. Проблема, скорее всего, заключается в том, что у вас есть
->get()
перед->where
, что означает, что вы получаете все строки в памяти, а затем фильтруете результирующую коллекцию в PHP вместо того, чтобы фильтровать их в базе данных3. я получал сообщение об ошибке: разрешенный объем памяти 134217728 байт исчерпан (пытался выделить 12288 байт). решение puting -> get after -> где его решили. Спасибо @apokryfos