Laravel - Есть ли более чистый способ сделать отношения hasMany без 2 циклов? - PullRequest
0 голосов
/ 10 января 2019

Я использую последнюю версию Laravel.

У меня есть 2 таблицы MySQL, называемые "authors" и "articles".

У меня есть 2 автора, "John" и "Sam", John имеет 2 статьи, Sam имеет 1, Статьи имеют столбец "user_id" с ID авторов.

Чтобы отобразить Authors и их Articles, мне нужно сделать 2 цикла

@foreach($authors as $author)


// Here the author names are displayed
    {{$author->name}}

// I have to do this loop so I can show the articles of the Author
    @foreach($author->article as $article)
   <h3> {{$article->name}} </h3>

    @endforeach


@endforeach

Если вам это нужно, вот мой автор Модель:

class Author extends Model
{
    //

    public function article(){

        return $this->hasMany("App\Article", "user_id");

    }
}

Я в основном спрашиваю, есть ли способ сделать это чище.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Поскольку у вас много авторов и статей, этот запрос будет очень дорогим и медленным. Я не уверен, как ваш пользовательский интерфейс показывает информацию об авторах и статьях, но я подумал бы о том, чтобы иметь страницу, которая показывает список авторов (но не показывает их статьи). И тогда пусть у каждого автора есть страница с подробностями. На странице сведений об авторе вы можете перечислить все статьи, которые можно было бы быстро и эффективно запросить на основе идентификатора автора. Это поможет вашему сайту стать чище, а ваши запросы более эффективными.

0 голосов
/ 10 января 2019

Да, вы можете сделать следующее:

@foreach($articles as $article)
    {{$article->author->name}}
    <h3>{{$article->name}}</h3>
@endforeach

Чтобы это работало, вы должны объявить обратную связь в модели Article следующим образом:

class Article extends Model
{

    public function author(){
        return $this->belongsTo("App\Author", "user_id");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...