2015-09-08 80 views
2

HI這是我在Laravel 5.1中的第一個項目。我被困在一個laravel多對多關係,請大家幫忙 我有一個像laravel 5.1多對多關係

新聞

ID的表|標題|內容

類別

ID |標題| cat_type

和數據透視表

category_news

ID | category_id | news_id

和模型

class News extends Model 
{ 
    public function categories() 
    { 
     return $this->belongsToMany('App\Category'); 
    } 
} 

class Category extends Model 
{ 
    public function news() { 

    return $this->belongsToMany('App\News'); 

    } 
} 

我如何得到cat_type = 1的所有的新聞與它S的相關類別

請幫助

我試圖

$news = News::whereHas('categories', 
      function($query){  
       $query->where('cat_type','2');  
      }) 
      ->where('publish','1') 
      ->orderBy('created_at', 'desc') 
      ->take(5) 
      ->get();//latest news 

它給出一個消息,但不是相對的泰德類 請幫 謝謝

回答

1

你也可以使用預先加載滿足您的需求。

在這種情況下,你應該做的是寫類似以下內容:

$categoryAndNews = Category::with('news')->where('cat_type',2)->first(); 

你也可以在上下文中的關係定義約束。

$categoryAndNews = Category::with(['news' => function($query){ 
    $query->orderBy('created_at', 'desc') 
    ->take(5); 
}])->get(); 

希望它會有用!

的話題更多詳細的活動:http://laravel.com/docs/5.1/eloquent-relationships#constraining-eager-loads

+0

弗朗切斯科Malatesta是的,但orderBy不工作 – sanu

+0

你能更具體嗎? :)我沒有元素來幫助你,否則......你得到什麼錯誤? _orderBy_只是跳過? _take()_方法有效嗎? –

+0

實際上是什麼發生的是1)如果消息屬於多個類別,它會顯示同一消息的多個時間2)的不正常--thanks – sanu

0

你可以先查詢類別像

$category = Category::where('cat_type',2)->first(); 
$news = $category->news()->where->where('publish','1') 
     ->orderBy('created_at', 'desc') 
     ->take(5) 
     ->get(); 
+0

阿卜杜勒·巴西特這只是給 – sanu

+0

一個類別的新聞爲多個類別,你可以替換第一個()的get()和與前(「新聞」)添加它。 $ news = Category :: with(['news'=> function($ query){query-> orderBy('created_at','desc'); }]) - > get(); –

+0

是正確的$ category = Category :: where('cat_type',2) - > get(); ('news'=> function($ query){$ query-> orderBy('created_at','desc');}]) - > get(); – sanu