我要做的就是验证查询.
'SELECT * from table_that_does_not_exist'
Run Code Online (Sandbox Code Playgroud)
如果没有错误,我想知道它失败了所以我可以返回一个响应,指出"错误:表不存在"或一般错误.
更新3:9个月前的问题在Laragon环境中的Windows 10上的Laravel 5.8和Postgresql 11以及在Ubuntu计算机上的Apache 2.4仍然存在。雄辩模型实例delete()方法是否只是忽略外键约束?令人困惑:
我在Postgresql 9.3数据库中有两个表,公司和站点。他们与一侧的公司之间存在一对多的关系。如果已将网站分配给公司,则有一个外键约束可以防止删除公司。如果我尝试直接在数据库上使用SQL查询删除ID为“ KSL”的公司,则会收到预期的错误:
错误:对表“ companies”的更新或删除违反了表“ sites”上的外键约束“ sites_company_id_fkey”详细信息:仍从表“ sites”中引用键(company_id)=(KSL)。
我定义了一个artisan命令,其处理程序方法具有一个简单的try / catch块:
public function handle()
{
$company = Company::find('KSL');
try{
$company->delete();
}catch(\PDOException $e){
$this->info($e->getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
当我从控制台运行命令时,我得到了预期的错误消息:
SQLSTATE [23503]:外键冲突:7错误:表“ companies”上的更新或删除违反了表“ sites”上的外键约束“ sites_company_id_fkey”详细信息:仍从表“ sites”中引用键(company_id)=(KSL) 。(SQL:从“ companies”中删除,其中“ company_id” = KSL)
反映由Postgresql生成的本机错误消息。但是,当我使用类似的try / catch块使用Ajax调用从Controller调用Controller的delete方法时,未捕获到异常,并且调用失败,并且没有错误的详细信息。我简化了控制器方法,使其与控制台处理程序相同:
public function deleteModel(Request $request) {
try {
$id = 'KSL';
$company = Company::find($id);
$result = $company->delete();
return 'success';
} catch (\PDOException $e) {
return $e->getMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
通常,我将从请求参数中获取$ id的值。如果在浏览器中使用带有RESTful URL的get请求,则在Firefox中会收到“连接已重置”消息,而在Chrome中会收到类似的消息。我已经提到了我的一个老问题,我认为它可以解决问题,但是跑步composer dump-autoload没有任何效果。我已经清除了缓存,重新安装了Laravel …