我在Yii2中有批量删除操作,下面是删除带有活动日志的记录的代码(这里DBMS是PostgreSQL)-
$companies = Yii::$app->request->post('ids', '');
if($companies && count($companies)) {
foreach ($companies as $company) {
try{
$utsendelseid = $company['utsendelseid'];
$mailid = $company['mailid'];
$model = MailSend::find()->where(['utsendelseid' => $utsendelseid, 'mailid' => $mailid])->one();
if($model && !$model->mailsendt) {
if($model->delete()) {
// if model deleted successfully then keep a log using commandBus
$companyModel = $this->findCompanyModel($model->kundenr);
$questionnaireModel = $this->findModel($utsendelseid);
Yii::$app->commandBus->handle(new AddCompanyLogCommand([
'kundenr' => $model->kundenr,
'portal_id' => ($questionnaireModel?$questionnaireModel->prosjektkode:''),
'activity' => Yii::t('backend', 'Slettet fra spørreskjema'),
'notes' => Yii::t('backend', 'Company "{company}" has been deleted from questionnaire - "{questionnaire}"("{questionnaire_id}")', [
'company' => ($companyModel?$companyModel->etternavn:''),
'questionnaire' => ($questionnaireModel?$questionnaireModel->beskrivelse:''),
'questionnaire_id' => $utsendelseid
]),
'activity_type_code' => 30,
]));
}
}
}
// even tried with PDOException
catch(Exception $e){
echo $e->getMessage();
// exit the request processing here
exit(0);
}
}
}
如果需要删除的记录数低于300,则此方法可以正常工作。如果记录数超过300,即使代码在try{}catch()块内,我也会收到内部服务器错误。我将max execution time设置为-1,max memory allocation设置为5120M,这现在不是问题所在。我认为这是一个连接错误太多的问题,而有那么多的SQL操作,因此,我在Yii2中启用持久连接,方法是
'attributes'=> [PDO::ATTR_PERSISTENT => true]
. 但问题仍然存在。
我的问题是-
-
为什么即使代码在try{}catch()块内,我仍会收到内部服务器错误?
-
为什么它能工作到45秒?
-
这是Apache杀死子进程的案例吗?
-
是否存在允许运行查询的最大时间问题?
-
如果这种情况下连接太多,那么为什么会出现持久连接问题?