Попытка прочитать свойство «имя» на null Laravel 9

я создаю простую систему инвентаризации, используя laravel 9. Я хочу присоединиться к таблицам в Laravel, это таблица категорий, таблица брендов и продукт. Я написал запросы на соединение. но я столкнулся с проблемой с попыткой прочитать свойство «имя» на нуле что я пробовал до сих пор, я прикрепил фрагмент кода ниже.

что я проверил ошибка Ошибка имеет точку вне этой строки {{ $item->категория->имя }}

Модель продукта

protected $table = 'products';

protected $primaryKey = 'id';
 
protected $fillable = ['barcode_no', 'productname', 'cat_id', 'brand_id', 'price'];


public function category()
{
    return $this->belongsTo(Category::class);
}

public function brand()
{
    return $this->belongsTo(Brand::class);
}

Модель категории

protected $table = 'categories';


    protected $primaryKey = 'id';


    protected $fillable = ['name', 'status'];


    public function products()
    {
        return $this->hasMany(Product::class, 'cat_id', 'id');
    }

Модель бренда

protected $table = 'brands';


    protected $primaryKey = 'id';

 
    protected $fillable = ['name', 'status'];

    public function products()
    {
        return $this->hasMany(Product::class, 'brand_id', 'id');
   }

Просмотр продукта

@foreach($products as $item)
    <tr>
       <td>{{ $loop->iteration }}</td>
      <td>{{ $item->barcode_no }}</td>
       <td>{{ $item->productname }}</td>
       <td>{{ $item->category->name }}</td>
       <td>{{ $item->brand->name }}</td>
    </tr>

ПродуктКонтроллер

 public function index(Request $request)
    {
        $keyword = $request->get('search');
        $perPage = 25;

        if (!empty($keyword)) {
            $products = Product::where('barcode_no', 'LIKE', "%$keyword%")
                ->orWhere('productname', 'LIKE', "%$keyword%")
                ->orWhere('cat_id', 'LIKE', "%$keyword%")
                ->orWhere('brand_id', 'LIKE', "%$keyword%")
                ->orWhere('price', 'LIKE', "%$keyword%")
                ->latest()->paginate($perPage);
        } else {
            $products = Product::latest()->paginate($perPage);
        }

        return view('admin.products.index', compact('products'));
    }

Ошибка в основном означает, что $item->category равно нулю, И вы не можете получить name на нуле. Вы можете сделать что-то вроде empty($item->category) ? null : $item->category->name

rhemmuuu 14.01.2023 08:11

так как загрузить вместо загрузки catid как имя

abi jega 14.01.2023 08:12

$item->category->имя не загружается

abi jega 14.01.2023 08:23

Вы пробовали это empty($item->category) ? null : $item->category->name

rhemmuuu 14.01.2023 08:26

да Catname не отображается, отображается только название бренда y

abi jega 14.01.2023 08:31

@abijega изменить отношение, чтобы вернуть $this->belongsTo(Category::class,'cat_id'); в продукте

John Lobo 14.01.2023 08:38

спасибо за работу........................................

abi jega 14.01.2023 08:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема с соглашением об именах cat_id в таблице продуктов, поэтому необходимо изменить отношение, как показано ниже, указав идентификатор категории.

public function category()
{
    return $this->belongsTo(Category::class,'cat_id');
}

Похоже, что у одного из продуктов может не быть назначенной категории. Поэтому проверьте нулевую проверку в шаблоне блейда, используя помощник option().

<td>{{ optional($item->category)->name }}</td>
<td>{{ optional($item->brand)->name??null }}</td>

и в вашем контроллере вы можете немного оптимизировать код, используя Условные предложения

public function index(Request $request)
{
        $keyword = $request->get('search');
        $perPage = 25;

            $products = Product::with(['category','brand'])->when(!empty($keyword),function ($query)use($keyword){
                $query->where('barcode_no', 'LIKE', "%$keyword%")
                    ->orWhere('productname', 'LIKE', "%$keyword%")
                    ->orWhere('cat_id', 'LIKE', "%$keyword%")
                    ->orWhere('brand_id', 'LIKE', "%$keyword%")
                    ->orWhere('price', 'LIKE', "%$keyword%");
            })->latest()->paginate($perPage);


        return view('admin.products.index', compact('products'));
}

Другие вопросы по теме