In laravel 9 I have ProductCardReport component which is on blade form and data are retrieved from ReportProduct class. I got data with firstOrFail in this class and I failed to catch this error in controller block. I have in ProductController controller :
public function showReport(string $productId)
{
try {
return view('admin/products/report', [
'productId' => $productId,
]);
} catch (ModelNotFoundException $e) { // I EXPECTED THIS BLOCK WOULD WORK
\Log::info('-1ModelNotFoundException:');
return redirect(route('admin.products.edit', $this->productId))
->with('message', 'Product "' . $this->productId . '" not found.')
->with('message_type', 'error');
} catch (Exception $e) {
\Log::info('-1 ProductCardReport -2 showReport $e->getMessage() ::' . print_r($e->getMessage(), true));
return back()->withErrors(['message' => $e->getMessage()]);
}
}
In view 'admin/products/report' I set component :
<x-app-layout>
<x-product-card-report product-id="{{ $productId }}" />
</x-app-layout>
and in component app/View/Components/ProductCardReport.php :
public function render()
{
$reportProduct = new ReportProduct();
$itemRetrieved = $reportProduct->retrieveItem( id : $this->productId );
...
}
And in app/Library/ReportProduct.php I get data with invalid ID :
class ReportProduct implements ReportRetrieveItemInterface, ReportDownloadItemInterface
{
public function __construct()
{
$uploadedFileManagement= app(UploadedFileManagementInterface::class);
$this->uploadedFileManagement = $uploadedFileManagement;
}
public function retrieveItem(string $id, array $getRelatedData = []) : bool
{
$this->product = Product
::getById($id .'ERROR') // ModelNotFoundException is raised here.
->firstOrFail();
But I got uncaught error :
Illuminate\Database\Eloquent\ModelNotFoundException
No query results for model [App\Models\Product].
and try block in ProductController did not work. How it can be fixed ?
Thanks!