Как получить данные родителей, даже если детей нет?

Я хотел бы получить родительские столбцы из вложенного контроллера ресурсов. Если у вложенного контроллера есть хотя бы одна строка, я могу легко получить родительский элемент. Но если для вложенного контроллера нет строк, как я могу получить родительский объект?

Чтобы объяснить это:

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

Проблема в том, если нет изображений. Тогда как я могу получить объект родительской статьи? Потому что я хочу показать его имя на странице изображений.

1

Решение

Этот метод использует идентификатор статьи, а не идентификатор изображения:

/* 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

Другие решения

Вот грубый обходной путь — вместо того, чтобы получить 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.

1

По вопросам рекламы [email protected]