2013-07-02 50 views
0

我需要能够根据路径封闭内的特定标准查询模型。if/else逻辑在雄辩查询中

我有这样的路线:

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); 
}); 

这部分作品,但我需要能够要么使用取决于获得()或firstOrFail()是否路由指向一个子类或实际页。

根据此条件更改变量的名称以及使用不同刀片模板的返回值也不错。

这种方法是否可行?谢谢。

更新:我几乎都有它的工作使用:

http://paste.laravel.com/zod

问题是,如果$ sub_category查询不返回任何东西,我得到未找到错误的模型。

+0

如果你不想引发错误,只需使用'first'即可。然后检查'$ sub_category'是否为空,以确保您获得结果。 –

回答

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); 
    } 
}); 

有可能是一个更好的办法,因此,如果任何人都可以摆脱一些关于它的光,将是巨大的。