Laravel 5.5 ¿por qué no se genera una excepción por violación de clave externa del método de eliminación?

Tengo dos tablas en una base de datos Postgresql 9.3, empresas y sitios. Existe una relación de uno a muchos entre ellos con las empresas, por un lado. Existe una restricción de clave externa que impide la eliminación de una empresa si se le han asignado sitios. Si intento eliminar la empresa con el ID 'KSL' usando una consulta SQL directamente en la base de datos, obtengo el error esperado:

ERROR: actualizar o eliminar en la tabla "compañías" viola la restricción de clave externa "sites_company_id_fkey" en la tabla "sitios" DETALLE: Clave (company_id) = (KSL) todavía se hace referencia desde la tabla "sitios".

He definido un comando artesanal cuyo método de controlador tiene un simple bloque try / catch:

public function handle()
{
    $company = Company::find('KSL');
    try{
        $company->delete();
    }catch(\PDOException $e){
        $this->info($e->getMessage());        
    }
}

Cuando ejecuto el comando desde la consola, recibo el mensaje de error esperado:

SQLSTATE [23503]: Infracción de clave externa: 7 ERROR: actualizar o eliminar en la tabla "compañías" viola la restricción de clave externa "sites_company_id_fkey" en la tabla "sitios" DETALLE: Clave (company_id) = (KSL) todavía se hace referencia desde la tabla "sitios" ". (SQL: eliminar de "compañías" donde "company_id" = KSL)

reflecting el mensaje de error nativo generado por Postgresql. Sin embargo, cuando llamo al método de eliminación desde un Controlador usando una llamada Ajax usando un bloque de prueba / captura similar, la excepción no se captura y la llamada falla sin detalles del error. Simplifiqué el método del controlador para que sea el mismo que el controlador de la consola:

    public function deleteModel(Request $request) {
        try {
            $id = 'KSL';
            $company = Company::find($id);
            $result = $company->delete();
            return 'success';
        } catch (\PDOException $e) {
            return $e->getMessage();
        }
     }

Normalmente obtendría el valor de $ id del argumento de solicitud. Si uso una solicitud de obtención con una URL RESTful en el navegador, aparece el mensaje "La conexión se restableció" en Firefox y un mensaje similar en Chrome. Me he referido de nuevo a unaold question mío que pensé que tenía la solución, pero ejecutandocomposer dump-autoload no tuvo ningún efecto. He borrado el caché, reinstalé Laravel 5.5, actualicé mi instalación y llamé acomposer dump-autoload nuevamente varias veces, pero la ausencia de cualquier excepción o mensaje de error registrado no me da idea. La depuración se establece en true para esta aplicación de desarrollo.

Pasé un controlador a la función nativa de PHP register_shutdown_function como esta en el archivo autoload.php en la carpeta bootstrap:

register_shutdown_function(function () {
    $error = error_get_last();
    file_put_contents(__DIR__.'/../storage/crash.log', var_export($error, true));
});

Solo la palabra 'NULL' aparece en crash.log. Revisé el archivo Apache 2.4 error.log y el registro de errores específico para esta aplicación Laravel, pero no hay detalles relevantes registrados allí.

Aquí está el controlador de excepciones:

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [
        //
    ];

    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];

    /**
     * Report or log an exception.
     *
     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
     *
     * @param  \Exception  $exception
     * @return void
     */
    public function report(Exception $exception)
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }
}

UPDATE 1: recibí una pista de esta pregunta: Tamaño de pila para Apache en Windows. Probé rápidamente mis aplicaciones en línea (todas se ejecutan en máquinas Linux) y no hay ningún problema. La excepción se produce correctamente y se muestra un mensaje claro y agradable para el usuario. Mi entorno local es Windows y parece que Apache sufre este error de restablecimiento de conexión más que en un entorno Linux. Aumenté el tamaño de la pila en Apache como sugiere la respuesta a esa pregunta, pero todavía no funciona. Todavía recibo un error de restablecimiento de conexión. He reinstalado Apache con los últimos binarios de Apache Lounge. Estoy ejecutando PHP 7.3. ¿Alguien puede arrojar algo de luz sobre esto

UPDATE 2: Una respuesta de Lucas aesta pregunt me animó a cambiar de servidor. Cuando corríphp artisan serve desde la consola y luego llame alParentTable->delete() método, obtuve la excepción esperada sin fallar. Claramente hay algo mal con mi configuración de Apache. Lamentablemente, la respuesta aceptada a esa pregunta no resuelve mi problema. Aumenté el tamaño de la pila pero el problema persiste.

Respuestas a la pregunta(0)

Su respuesta a la pregunta