Конструктор запросов Eloquent с использованием Eager Загрузка в Laravel - PullRequest
0 голосов
/ 10 декабря 2018

Имеет типичный squeme с постом и комментариями, где пост имеет много комментариев, а комментарий принадлежит одному посту:

Модель поста:

 public function comments(){
    return $this->hasMany('App\Comment');
}

после миграции:

Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');         
    });

Модель комментариев:

 public function Post(){
    return $this->belongsTo('App/Post', 'id');
}

Миграция комментариев:

   Schema::create('comments', function (Blueprint $table) {
        $table->increments('id');
        $table->date('date_comment');
        $table->unsignedInteger('post_id')->nullable()->default(null);
        $table->foreign('post_id')->references('id')->on('posts');
        });

Я хотел бы использовать готовую загрузку в Laravel.

Например.Как я могу получить всех сообщений с его самым последним комментарием , используя нетерпеливую загрузку?

Я попробовал это:

$post = Post::with('comments:post_id, date_comment')->get();

Но вот так яполучить все комментарии.Любая помощь, пожалуйста?

С наилучшими пожеланиями

РЕДАКТИРОВАТЬ:

foreach заявление (Blade):

   @foreach($posts as $post)            
            <td>{{ $post->name }}</a></td>
            <td>
            {{ !empty($post->comments[0]) ? $post->comments[0]-> 
                date_comment : '' }}
            </td>                                      
   @endforeach

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Вы можете ограничить нетерпеливую загрузку

$posts = Post::with(['comments' => function($qry) {
    $qry->->select('id','date_comment')->orderBy('date_comment', 'desc')->first();
}])->get();

Используя это, вы можете получить доступ к всем сообщениям с последними комментариями .

При использованииметод select для запроса не забудьте добавить в список поле id.

Для доступа к date_comment комментариев:

foreach($posts as $post) {
    var_dump(!empty($post->comments[0]) ? $post->comments[0]->date_comment : '');
}
0 голосов
/ 10 декабря 2018

Вам нужно создать еще одно отношение для получения последнего комментария.

Post.php

public function comments(){
    return $this->hasMany('App\Comment');
}

public function latestComment(){
    return $this->hasOne('App\Comment')->orderBy('date_comment', 'desc');
}

Теперь вы можете получить его следующим образом.

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

Примечание: не тестировалось.

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