2015-10-19 62 views
1

我想從嵌套的資源控制器中檢索父列。如果嵌套控制器至少有單行,我可以輕鬆地檢索父級。但是如果沒有嵌套控制器的行,我怎麼能得到父對象?即使孩子不在場,如何獲取父母數據?

爲了解釋這一點:

/* I have two routes: */ 
Route::resource('articles', 'ArticleController'); 
Route::resource('articles.images', 'ArticleImageController'); 

ArticleImage模型具有這樣的功能:

public function article() { 
     return $this->belongsTo('App\Article'); 
    } 

這裏是我得到的數據:

/* www.site.com/articles/1/images */ 
public function index($id) { 
     // 
     $data['images'] = ArticleImage::where('article_id', $id); 
     // to get parent data, I can call 
     $article = $data['images'][0]->article(); 
    } 

的問題是,如果沒有圖片。那我怎樣才能得到父文章對象?因爲我想在圖像頁面上顯示它的名字。使用文章編號

回答

1

這種方法,而不是圖片ID:

/* www.site.com/articles/1/images */ 
public function index($id) { 
    // 
    $data['images'] = ArticleImage::where('article_id', $id); 
    // to get parent data, I can call 
    $article = $data['images'][0]->article(); 
} 

所以,你的文章型號:

public function images() { 
    // change the name according to your model 
    return $this->hasMany('App\Images'); 
} 

你怎麼檢索圖像

/* www.site.com/articles/1/images */ 
public function index($id) { 
    // Get the article 
    $article = Article::with('images')->find($id); 
    // Here is your article images 
    $article->images; 
} 
+0

嗨@Izozozo其實我不是在談論文章控制器,而是圖像控制器。我知道我可以檢索文章控制器下的圖像。但是我想要的是與你上面分享的相反。我想在沒有圖像時從圖像控制器中檢索文章對象。 –

+0

我知道,這個索引函數是在你的** ImageController **中,而不是在Article中。由於您嵌套資源路由,第一個參數將是文章ID。這條路線:'articles/1/images'調用你的Image控制器索引方法(就像你設置的那樣),文章ID爲1.這條路線:'articles/1/images/2'會調用你的'show'方法:''顯示($ article_id,$ image_id)'在** ImageController ** – Iamzozo

+0

我現在明白了。謝謝 :) –

1

這裏有一個粗的解決方法 - 而不是得到ArticleImage,得到父母Article因爲這是什麼$id是爲和渴望加載images的關係。這樣,即使沒有images,您仍然會擁有母公司的文章$article

/* www.site.com/articles/1/images */ 
public function index($id) { 
    $article = Article::with('images')->find($id); 

    $data['images'] = $article->images; 
    $data['article'] = $article; 

    return view('my.view', $data); 
} 

如果你通過$data到它,你會在你的視圖訪問$article

UPDATE

我意識到,這種做法幾乎是相同的@ Iamzozo的答案。