2017-04-16 62 views
0

我有一个模型之间有很多关系:post和category在laravel应用程序。我定义了这些关系为:通过除id以外的其他字段检索数据有很多关系

public function category() { 
     return $this->belongsTo('artSite\category'); 
} 

public function posts() { 
     return $this->hasMany('artSite\post'); 
} 

现在我想要找回属于其衍生在HTTP请求中的特定类别的职位:

Route::get('posts/categories/{categoryName}','[email protected]') 

下面我展示我的控制器功能(它工作很好!):

public function showPostGivenCategory($categoryName) { 

    $category = category::where('category_name','=',$categoryName)-first(); 
    $posts = category::find($category->id)->posts; 
    return view('pages.homePage')->with('categories',$categories)with('posts',$posts); 

} 

在这个解决方案中,我创建了2个查询。是否有任何可能的方法来创建1个查询来检索具有很多关系的特定类别的帖子?

类似的东西不起作用:

$posts = category::where('category_name','=',$categoryName)->posts; 

有人能帮助我解决这个问题?我将非常感激,问候。

+0

你为什么不只是传递的请求而不是名称$类别 - > ID?然后你可以直接传递id而不搜索实际的类别。您也可以决定使用findOrFail()来确保您检索存在或处理异常的类别。或者你也可以使用findMany([]),这将允许你同时检索多个类别。但首先我会尝试传递id而不是类别的名称。如何挑选类别? – jsrosas

回答

0

我们可以摆脱第二线:

$posts = Category::find($category->id)->posts; 

所以你可以说:

$posts = Category::where('category_name','=',$categoryName)->first()->posts; 
+1

非常感谢。它工作正常;) –