如何获取父数据,即使子数据不存在


How to get Parent data even if children are not present?

我想从嵌套的资源控制器检索父列。如果嵌套的控制器至少有一行,我就可以很容易地检索父控制器。但是,如果嵌套控制器没有行,我如何获得父对象呢?

解释一下:

/* 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();
    }

问题是,如果没有图像。那么我怎样才能得到父条目对象呢?因为我想在图像页面上显示它的名字

此方法使用文章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;
}

这是一个粗略的解决方案-而不是获得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

我意识到这个方法和@Iamzozo的答案几乎是一样的。