>PHP 프레임워크 >Laravel >Laravel Eloquent의 hasMany를 사용하여 Infinitus 분류 개발

Laravel Eloquent의 hasMany를 사용하여 Infinitus 분류 개발

Guanhui
Guanhui앞으로
2020-05-11 10:20:442990검색

다음 소개 튜토리얼 칼럼은 Laravel에서 Laravel Eloquent의 hasMany를 사용하여 Infinitus 분류를 개발하는 방법을 소개합니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

온라인 쇼핑몰에서는 다단계 카테고리, 하위 카테고리, 심지어 인피니투스 카테고리까지 종종 볼 수 있습니다. 이 기사에서는 Laravel Eloquent를 사용하여 이를 우아하게 구현하는 방법을 보여줍니다.

어린이 매장 분류를 다음과 같이 총 5단계로 표시하는 마이크로 프로젝트를 생성합니다.

Laravel Eloquent의 hasMany를 사용하여 Infinitus 분류 개발

데이터베이스 마이그레이션

간단한 데이터 테이블 구조:

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가 있습니다

데이터 테이블 데이터는 다음과 같습니다.

Laravel Eloquent의 hasMany를 사용하여 Infinitus 분류 개발

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(&#39;child_category&#39;, [&#39;child_category&#39; => $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(&#39;child_category&#39;, [&#39;child_category&#39; => $childCategory])
        @endforeach
    </ul>
@endif

child_category.blade.php 내부에는 @include('child_category')가 포함되어 있으므로 현재 하위 카테고리에 카테고리가 있는 한 템플릿이 하위 카테고리를 반복적으로 로드합니다.

그렇습니다! 데이터베이스, 관계, 뷰 등 하위 범주의 수준은 무제한입니다.

더 많은 Laravel 프레임워크 기술 기사를 보려면 laravel튜토리얼을 방문하세요!

위 내용은 Laravel Eloquent의 hasMany를 사용하여 Infinitus 분류 개발의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제