0

ルート クロージャ内の特定の基準に基づいてモデルをクエリできる必要があります。

私はこのルートを持っています:

Route::get('courses/{category_slug}/{slug}', function($category_slug, $slug) {
    $category = Category::where('slug', $category_slug)->first();

    $course = Course::leftJoin('categories', 'categories.id', '=', 'courses.category_id')
        ->where('categories.slug', '=', $category_slug)
        ->where('courses.slug', '=', $slug)
        ->orWhere('categories.parent_id', '=', $category->id)
        ->where('categories.slug', '=', $slug)
        ->firstOrFail();

    return View::make('courses.show')->with('course', $course);
});

これは部分的に機能しますが、ルートがサブカテゴリを指すか実際のページを指すかに応じて、get() または firstOrFail() を使用できるようにする必要があります。

この基準に基づいて変数の名前を変更し、別のブレード テンプレートを使用するように戻り値を変更するとよいでしょう。

このアプローチは実現可能ですか?ありがとう。

更新:私はほとんどそれを使用して動作しています:

http://paste.laravel.com/zod

問題は、$sub_category のクエリが何も返さない場合、モデルが見つからないというエラーが発生することです。

4

1 に答える 1

0

OK、次を使用して動作しました:

Route::get('courses/{category_slug}/{slug}', function($category_slug, $slug) {
    $category = Category::where('slug', $category_slug)->first();
    $sub_category = Category::where('slug', $slug)->first();

    if (!is_null($sub_category)) {
        if ($sub_category->slug === $slug) {
            $courses = Course::leftJoin('categories', 'categories.id', '=', 'courses.category_id')
                ->where('categories.parent_id', '=', $category->id)
                ->where('categories.slug', '=', $slug)
                ->get();

            return View::make('courses.index')->with('courses', $courses);
        }
    } else {
        $course = Course::leftJoin('categories', 'categories.id', '=', 'courses.category_id')
            ->where('categories.slug', '=', $category_slug)
            ->where('courses.slug', '=', $slug)
            ->firstOrfail();

        return View::make('courses.show')->with('course', $course);
    }
});

おそらくもっと良い方法があるので、誰かがそれに光を当てることができれば、それは素晴らしいことです.

于 2013-07-02T12:26:30.893 に答える