即使 children 不存在,如何获取 Parent 数据?

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

我想从嵌套资源控制器中检索 parent 列。如果嵌套控制器至少有一行,我可以轻松检索 parent。但是如果嵌套控制器没有行,我怎样才能得到 parent object?

解释一下:

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

问题是,如果没有图像。那我怎样才能得到parent篇文章object呢?因为我想在图片页面上显示它的名字。

此方法使用文章 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 的回答几乎相同。