Я хотел бы получить родительские столбцы из вложенного контроллера ресурсов. Если у вложенного контроллера есть хотя бы одна строка, я могу легко получить родительский элемент. Но если для вложенного контроллера нет строк, как я могу получить родительский объект?
Чтобы объяснить это:
/* 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();
}
Проблема в том, если нет изображений. Тогда как я могу получить объект родительской статьи? Потому что я хочу показать его имя на странице изображений.
Этот метод использует идентификатор статьи, а не идентификатор изображения:
/* 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
отношения. Таким образом, вы всегда будете иметь родительскую статью как $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.