Во-первых, метод productInventory () должен возвращать отношение.не имеет значения, что для некоторых записей нет подключенного инвентаря.Этот метод должен возвращать отношения, вот и все ... Путать это возвращение с фактическим состоянием БД («для этого конкретного продукта нет инвентаря»), это действительно не нужно, ИМХО.
ТакЕсли ваша проблема заключается в представлении, то там, где нет инвентаря, вы получаете ошибку, лучшим решением будет:
Проверьте в представлении, есть ли доступный объект, и только затем проверьте атрибут ценына этом объекте.
Вы можете проверить это с помощью чего-то вроде ...
@if(is_null($productInventory))
{{$productInventory->price}}
@endif
Кстати, это ПРИМЕР кода, а не реальный реальный код.Но это дает вам представление о том, где решить эту проблему.
Потому что вы решаете это не в том месте.Имхо, метод отношений НЕ место.
Если вы используете это во многих представлениях, вы должны оптимизировать структуру VIEW (используя include!), А не перемещаться с проблемой в другое место в вашемcode.
Сделайте включение для кода представления, который вы часто используете, и включите что-то вроде:
@include('product_incventory_price_data')
О включениях в Blade
Давайте использовать пример для вашего <head>
кода на ваших веб-страницах.Вы можете добавить это ко всем отдельным веб-страницам (ваши файлы просмотра).давайте рассмотрим два разных представления (A en B)
file: view_a.blade.php
<html>
<head>
<meta charset="utf-8">
<title>{{$page->title}}</title>
<meta name="description" content="{{$page->description}}">
<meta name="keywords" content="{{$page->keywords}}">
</head>
<body>
...stuff for view A
</body>
</html>
file: view_b.blade.php
<html>
<head>
<meta charset="utf-8">
<title>{{$page->title}}</title>
<meta name="description" content="{{$page->description}}">
<meta name="keywords" content="{{$page->keywords}}">
</head>
<body>
...stuff for view B
</body>
</html>
AЛучшее решение: переместить весь код <head>
в другой файл (в папку, такую как views / shared).И включите этот файл в оба представления A en B.
shared / head.blade.php
<head>
<meta charset="utf-8">
<title>{{$page->title}}</title>
<meta name="description" content="{{$page->description}}">
<meta name="keywords" content="{{$page->keywords}}">
</head>
view_a
<html>
@include('shared/head')
<body>
...stuff for view A
</body>
</html>
view_b
<html>
@include('shared/head')
<body>
...stuff for view B
</body>
</html>
Вы можете сделать это со всеми видами фрагментов кода.Кроме того, информация о цене вашего продукта может быть перемещена в одно место и использована в нескольких других представлениях с помощью @include () ...
Данные, которые вы передаете в представления вашего контроллера, также передаются во включаемые файлы.Не беспокойтесь об этом ....: -)
Документация Laravel о представлениях и вложенных представлениях