簡體   English   中英

Laravel 5.6-有效獲取關系計數和updated_at列的最后一個值

[英]Laravel 5.6 - Efficiently get relation count and last value of updated_at column

可以說我的PostsComments定義為:

post.php中

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

Comment.php

public function post()
{
  return $this->belongsTo('App\Post');
}

我想有效地加載帶有number of comments和最后更新的評論的updated_at列的Post。 我將如何進行?

我能想到的最好的方法是將所有評論加載到Post中,但是將對Comments的選擇限制為post_idupdated_at列。 然后在視圖中計數已加載的Comment以獲得計數,並使用sortByDesc('updated_at')->first()以獲得最后一列的日期:

MyController.php

Post::with([
  'comments' => function($q) {
    $q->select('post_id','updated_at');
  }
])->get();

my_view.blade.php

Comments count: {{ $posts->comments->count() }}
Last comment: {{ $posts->comments->sortByDesc('updated_at')->first()->updated_at }}

有沒有一種方法可以更有效地執行此操作,並且僅獲取評論計數和最新comments.updated_at列的值?

MySQL或Eloquent解決方案都可以。

謝謝!

您可以使用withCount()實現兩者:

Post::withCount([
    'comments',
    'comments as last_comment' => function($q) {
        $q->select(DB::raw('max(updated_at)'));
    }
])->get();

Comments count: {{ $post->comments_count }}
Last comment: {{ $post->last_comment }}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM