2017-09-15 104 views
0

我有一個數據庫,其中列出了一個新聞和新聞類別表。Laravel |雄辯地填充外部數據

我有一個類別1的新聞,它鏈接到類別表的外鍵,其中類別值等於類別表中的ID。

我試圖讓一個控制器獲取類別名稱而不是類別ID作爲JSON響應返回結果時。

到目前爲止,我有這個模型裏面:

public function category() 
{ 
    return $this->belongsTo(NewsCategories::class); 
} 

然後我在做這個控制器的內部:

public function index() 
{ 
    $news = new News(); 
    $news = $news->category()->get(); 

    return response()->json(['data' => $news], 200); 
} 

,但得到返回的JSON響應爲空。我搜索了一些東西,但沒有真正發現有關在類別表中獲得標題的外國字段的任何有用信息。

這是響應我得到

{ 
    data: [ ] 
} 

回答

1

第一個問題是,你的感覺是你的新News實例已鏈接類別下:

$news = new News(); 

這將產生只是一個空的模型實例;它還沒有數據庫表示。嘗試通過填充的模型實例提取類別:

$news = News::first(); 

// Or: 
$news = News::find(1); 

並重試JSON響應。

第二個問題是,通過致電$news->category()->get()你實際上是querying the relation。如果您只需要訪問標題,請嘗試$news->category->title,它將加載關聯的類別記錄並訪問title字段。


關於您的評論,請閱讀eager/lazy loading

+0

因此,它返回類別ID而不是實際標題 – tallent123

+0

正如前面在其他評論中提到的,'$ news = News :: with('category') - > with('user') - > get ();'似乎工作,有沒有寫這個的另一種方式? – tallent123

+0

這是因爲你實際[查詢](https://laravel.com/docs/5.5/eloquent-relationships#querying-relations)通過'$ news-> category() - > get()'獲得關係模型通過'$ news-> category-> title'訪問標題。 – sepehr