Я новичок в Laravel и использую L8.
У меня есть таблица category
, и в ней есть parent_id
для моих подкатегорий.
Я использую одну таблицу и модель для CRUD, но мой контроллер и представление разделены.
это означает :
categories table
Category model
categoryController
SubCategoryController
categories.blade
sub_categories.blade
в моем subcategory-index.blade.php
я хочу показать категории, но я просто могу показать их с их идентификатором (родительский идентификатор)
Я не знаю, как отображать заголовок категорий вместо их идентификатора.
У меня есть эта миграция для таблицы категорий:
public function up()
{
Schema::dropIfExists('categories');
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('parent_id')->default(123);
$table->string('title');
$table->longText('description');
$table->tinyInteger('status')->comment('status is 1 when a category is active and it is 0 otherwise.')->nullable();
$table->rememberToken();
$table->softDeletes();
$table->timestamps();
});
}
и это модель моей категории:
class Category extends Model
{
use HasFactory;
protected $fillable = [
'parent_id','title' , 'description', 'status',
];
public function children(){
return $this->hasMany(Category::class , 'parent_id');
}
public function post(){
return $this->hasMany(Post::class);
}
}
и мой контроллер подкатегории:
...
public function index()
{
$parent_id = Category::with('parent_id')->get();
$subcategories = Category::where('parent_id' ,'!=', 123)->get();
return view('admin.subcategories.subcategories-index' , compact('subcategories'));
}
...
и часть для отображения заголовка подкатегории в category-index.blade.php:
<table class="table table-bordered">
<tr>
<th>#</th>
<th>id</th>
<th>title</th>
<th>category</th>
<th>status</th>
<th>operation</th>
</tr>
@foreach($subcategories as $subcategory )
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $subcategory['id'] }}</td>
<td>{{ $subcategory['title'] }}</td>
<td>{{ $subcategory['parent_id']}}</td>
<td>
@if($subcategory['status']==0 or $subcategory['status']==NULL)
inactive
@else
active
@endif
</td>
<td>
<form method="POST" action="{{ route('subcategory.destroy',$subcategory->id) }}">
<a class="btn btn-info" href="{{ route('subcategory.show' , $subcategory->id) }}">show</a>
<a class="btn btn-primary" href="{{ route('subcategory.edit' , $subcategory->id) }}">edit</a>
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger"> delete</button>
</form>
</td>
</tr>
@endforeach
</table>
Спасибо, что сказал мне, что делать: ›
$categories = Category::whereNull('parent_id')->get();
- person MAY   schedule 12.03.2021$sub_catgories = Categories::with('childern')->whereNotNull('parent_id')->get();
вы должны переименовать свое отношение, оно должно быть parent, а не childern, потому что оно указывает на родителя. - person MAY   schedule 12.03.2021{{ $subcategory->parent_id->title}}
, дает мне Попытку получить свойство 'title' не-объектной ошибки. где моя ошибка? - person calisa   schedule 12.03.2021parent_id
не является объектом, вы должны сделать это$parents = $sub_categories->parent
, это даст вам всех родителей для этой подкатегории, поскольку из вашего отношения одна подкатегория может иметь несколько родителей. а затем зациклиться на$parents
и получить доступ к заголовку с помощью$parent->title
. Я надеюсь, это поможет. - person MAY   schedule 13.03.2021