Измените свой метод так, чтобы он был таким:
public function categoryName(){
return $this->belongsTo('App\Models\Category','parent');
}
Без добавления внешнего ключа 'parent'
он будет использовать имя метода для получения родительского объекта.
Это всегда хорошо Практикуйтесь всякий раз, когда вы сталкиваетесь с такой проблемой, чтобы dd
запрос или результаты
, чтобы вы могли отладить его следующим образом (напишите это где-нибудь, где вы можете его протестировать): dd(Category::first()->categoryName()->toSql());
это должно дать вам подсказку что происходит
Вы получаете эту ошибку:
Попытка получить свойство необъекта (Представление: C: \ xampp \ htdocs \ projects \ gokarna \ resources \ views \ admin \ pages \ateg.blade. php) Но он отлично работает с таблицей сообщений, из которой я выбираю категорию сообщений.
, поскольку, по вашему мнению, ...->categoryName->...
равно нулю таким образом делая ->categoryName->name
недействительным
Плюс, в вашем контроллере вы не отправляете $categoryList
, я не вижу там этого:
public function index()
{
$parent = $this->category->where('is_parent', 1)->get();
$allCategories = $this->category->get();
// no $categoryList sent here.. ?
return view('admin.pages.categories', compact('parent', 'allCategories'));
}
Но так как это не не показывать ошибку, что переменная $ categoryList не определена, тогда она где-то есть, но вы забыли людям Что касается нас, то в вашем вопросе есть что-то неясное, однако.
Я бы посоветовал вам изменить свой код на
...
$table->unsignedBigInteger('category_id')->nullable(); // Because `parent` is a preserved mysql keyword
$table->foreign('category_id')->references('id')->on('categories')->onDelete('SET NULL');
...
Категория Модель
public function category(){
# In this case here, Laravel will look for column of method_name + _id
# so it will look for ...category_id without manually defining the
# Foreign key
return $this->belongsTo('App\Models\Category');
}
Тогда вы можете легко получить его в своем виде, например:
<td>{{ $whateverCategoryObjectThisIs->category->name }}</td>
Вы можете включить функцию optional
, чтобы предотвратить его выброс, если родительская категория не установлена так
<td>{{ optional($whateverCategoryObjectThisIs->category)->name }}</td>