2015-10-19 35 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的答案。