다음 소개 튜토리얼 칼럼은 Laravel에서 Laravel Eloquent의 hasMany를 사용하여 Infinitus 분류를 개발하는 방법을 소개합니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!
온라인 쇼핑몰에서는 다단계 카테고리, 하위 카테고리, 심지어 인피니투스 카테고리까지 종종 볼 수 있습니다. 이 기사에서는 Laravel Eloquent를 사용하여 이를 우아하게 구현하는 방법을 보여줍니다.
어린이 매장 분류를 다음과 같이 총 5단계로 표시하는 마이크로 프로젝트를 생성합니다.
데이터베이스 마이그레이션
간단한 데이터 테이블 구조:
Schema::create('categories', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->unsignedBigInteger('category_id')->nullable(); $table->foreign('category_id')->references('id')->on('categories'); $table->timestamps(); });
하나의 이름 필드만, 그 자체와 연관되어 있습니다. 따라서 대부분의 상위 카테고리 Category_id = NULL, 각 하위 카테고리에는 parent_id가 있습니다
데이터 테이블 데이터는 다음과 같습니다.
Eloquent 모델 및 연관
먼저 app/Category.php에서 생성합니다. 간단한 hasMany() 메소드를 사용하면 분류에 자체 분류가 있을 수 있습니다.
class Category extends Model { public function categories() { return $this->hasMany(Category::class); } }
재미는 이 글의 최고의 "전략"에서 시작됩니다. 이와 같은 재귀 관계를 설명할 수 있다는 것을 알고 계셨습니까? 다음과 같습니다:
public function childrenCategories() { return $this->hasMany(Category::class)->with('categories'); }
그래서 Category::with('categories')를 호출하면 하위 수준의 "하위 범주"를 얻게 되지만 Category::with('childrenCategories')를 사용하면 무한한 가능성을 달성하는 데 도움이 됩니다.
Routes and Controller Methods
이제 위의 예와 같이 모든 카테고리와 하위 카테고리를 표시해 보겠습니다.
routes/web.php에 다음을 추가합니다:
Route::get('categories', 'CategoryController@index');
app/Http/CategoryController.php 다음과 같이:
public function index() { $categories = Category::whereNull('category_id') ->with('childrenCategories') ->get(); return view('categories', compact('categories')); }
부모 카테고리만 로드하고 하위 카테고리는 관계로 남겨둡니다. 간단하죠?
Views and recursive subviews
마지막으로 페이지를 렌더링합니다. resources/views/categories.blade.php 파일에서:
<ul> @foreach ($categories as $category) <li>{{ $category->name }}</li> <ul> @foreach ($category->childrenCategories as $childCategory) @include('child_category', ['child_category' => $childCategory]) @endforeach </ul> @endforeach </ul>
먼저 최상위 상위 카테고리를 순회한 다음 상위 클래스의 하위 카테고리를 순회한 다음 @include를 사용하여 하위 카테고리의 하위 카테고리를 로드합니다.
가장 좋은 점은 resources/views/admin/child_category.blade.php가 재귀적으로 로드된다는 것입니다. 코드를 보세요:
<li>{{ $child_category->name }}</li> @if ($child_category->categories) <ul> @foreach ($child_category->categories as $childCategory) @include('child_category', ['child_category' => $childCategory]) @endforeach </ul> @endif
child_category.blade.php 내부에는 @include('child_category')가 포함되어 있으므로 현재 하위 카테고리에 카테고리가 있는 한 템플릿이 하위 카테고리를 반복적으로 로드합니다.
그렇습니다! 데이터베이스, 관계, 뷰 등 하위 범주의 수준은 무제한입니다.
더 많은 Laravel 프레임워크 기술 기사를 보려면 laravel튜토리얼을 방문하세요!
위 내용은 Laravel Eloquent의 hasMany를 사용하여 Infinitus 분류 개발의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!