Как получить вложенные данные от нетерпеливой загрузки на Laravel?

У меня есть модель Post и User с отношениями, как показано ниже.

User Model:
    public function posts(){
        return $this->hasMany(Post::class);
    }
Post Model:
    public function user(){
        return $this->belongsTo(User::class);
    }

А ниже функция API, которая вызывается из Ajax.

public function Api(Request $request){
    $posts = Post::with('user')->get();
    return response()->json($posts);
}

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

    loadData().then(data => {
        let  html = ``;
        data.forEach((post,index) => 
            html += `<tr >                                        
                <td> ${post.title} </td>                                            
                <td> ${post.user['name']}</td> 
                <td> ${post.user['email']}</td> 
                <td> *num_of_post*</td> //<--need num of post here
            </tr>`
            )
        $("#table_wrapper").html(html);
    })

Также я хотел бы отображать количество сообщений для каждого пользователя. Я пытаюсь ${post.user.posts.lenght}, но команда не работает. Буду очень признателен за любые советы или рекомендации по этому поводу, спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
344
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо:

$posts = Post::with('user')->get();

вы можете использовать:

$posts = Post::with(['user' => function($q) {
    $q->withCount('posts');  
}])->get();

и позже вы можете использовать его так:

<td>${post.user['posts_count']}</td>

Уважаемый Марчин Набялек! Работа отличная. Большое спасибо.

joenpc npcsolution 26.12.2020 10:42

@joenpcnpcsolution Рад, что смог помочь

Marcin Nabiałek 26.12.2020 10:44

Другие вопросы по теме