我想从嵌套资源控制器中检索父列。如果嵌套控制器至少有一行,我可以轻松检索父级。但是,如果嵌套控制器没有行,我该如何获取父对象?
解释一下:
/* 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();
}
问题是,如果没有图像。那我怎样才能获得父文章对象?因为我想在图片页面上显示它的名字。
答案 0 :(得分:1)
此方法使用文章ID,而不是图片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;
}
答案 1 :(得分:1)
这里有一个原始的解决方法 - 而不是获得ArticleImage
,得到父Article
,因为那是$id
的用途并且急切加载images
1}}关系。这样,即使没有$article
,您也始终将父文章设为images
。
/* 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);
}
如果您将$article
传递给视图,则您可以在视图中访问$data
。
<强>更新强>
我意识到这种方法几乎与@ Iamzozo的答案相同。