Laravel - Получить данные из другой таблицы на основе идентификатора - PullRequest
1 голос
/ 10 февраля 2020

У меня есть следующее:

PublisherController. php

 public function show($name)
{

    $category = Publisher::with("publishers")->where('slug', $name)->first();
    if($category)
    {
        $ptitle = 'All '. $category->name . ' Albums';
        return View::make('album.list', array('data' => $category, 'ptitle' => $ptitle));
    }
}

И модель издателя:

    public function publishers()
{
    try{
        return $this->belongsToMany('Album',"publisher_id","id");
    }catch (Exception $ex){
        echo $ex->getMessage();

    }

}

То, чего я пытаюсь добиться, это показать все записи «Альбома», имеющие в качестве параметра $ name.

База данных выглядит следующим образом:

albums
    id
    publisher_id
    name

publishers
    id
    slug
    name

Я почти уверен, что неправильно использую ownToMany. Что я должен использовать вместо этого? В настоящее время я получаю пустую страницу, без ошибок, которая также раздражает.

Спасибо!

1 Ответ

1 голос
/ 10 февраля 2020

Сначала переименуйте ваши отношения в albums и измените тип:

// Publisher model
public function albums()
{
    return $this->hasMany('Album');
}

Затем измените функцию контроллера на:

// rename $name to $slug for clarity.
public function show($slug)
{
    $publisher = Publisher::whereHas('albums', function ($q) use ($slug) {
        $q->where('name', $slug);
    })->where('slug', $slug)->first();

    if($publisher)
    {
        $ptitle = 'All '. $publisher->name . ' Albums';
        return View::make('album.list', array('data' => $publisher, 'ptitle' => $ptitle));
    }
}

Теперь вы можете получить доступ и l oop над $publisher->albums коллекцией в вашем файле просмотра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...