即使孩子不在场,如何获取家长数据?

时间:2015-10-19 11:22:35

标签: php laravel laravel-5 entity-relationship

我想从嵌套资源控制器中检索父列。如果嵌套控制器至少有一行,我可以轻松检索父级。但是,如果嵌套控制器没有行,我该如何获取父对象?

解释一下:

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

问题是,如果没有图像。那我怎样才能获得父文章对象?因为我想在图片页面上显示它的名字。

2 个答案:

答案 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的答案相同。