相关疑难解决方法(0)

如何在laravel中捕获查询异常以查看它是否失败?

我要做的就是验证查询.

'SELECT * from table_that_does_not_exist'
Run Code Online (Sandbox Code Playgroud)

如果没有错误,我想知道它失败了所以我可以返回一个响应,指出"错误:表不存在"或一般错误.

sql laravel-5

24
推荐指数
4
解决办法
5万
查看次数

Laravel 5.5为什么删除方法中的外键违反没有引发异常?

更新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 …

postgresql-9.3 apache2.4 laravel-5 php-7.0 postgresql-11

6
推荐指数
0
解决办法
427
查看次数