Жадная загрузка "многие ко многим" в laravel красноречивых отношениях (получить все сообщения с назначенными им тегами) - PullRequest
0 голосов
/ 29 мая 2020

Мой блог. В проекте laravel много сообщений, и каждое сообщение принадлежит множеству тегов. Теперь я хочу получить все блоги и их теги и повторить каждый тег.

Вот код, который я написал. Есть ли способ лучше?

<code>$posts = Post::with('tags')->get();

    foreach ($posts as $post) {
        foreach ($post->tags as $tag) {
            echo "<pre> $tag->name
";}} d ie ();

1 Ответ

0 голосов
/ 29 мая 2020

Вы можете получить все теги с помощью Eager loading, как и в своем коде.

Взгляните на https://laravel.com/docs/7.x/eloquent-relationships#eager -loading

$posts = App\Post::with('tags:name')->get();

foreach ($posts as $post) {
    foreach ($post->tags as $tag) {
        echo " $tag->name
";}}

Это правильное решение.

Вы даже можете сделать это с помощью DB запросов, чтобы получить его быстрее, но, вероятно, вашего пути будет достаточно.

$posts = App\Post::all()->pluck('id');

return DB::select('SELECT name FROM tags WHERE id in (' . implode(',', $posts) . ')');

Заключительный совет: Не объединяйте HTML просмотр с логи c.

...