Laravel 다중 관계식에 사용되는 중간 테이블의created_at, updated_열별로 정렬(예:at)

3839 단어 PHPLaravelEloquent

전제 조건

userspostsfavorites을 중간표로 하여 다대다의 관계이다.

TL;DR

public function favorite_posts()
{
    return $this
        ->belongsToMany(Post::class, 'favorites', 'user_id', 'post_id')
        ->withPivot(['created_at', 'updated_at', 'id'])
        ->orderBy('pivot_updated_at', 'desc')
        ->orderBy('pivot_created_at', 'desc')
        ->orderBy('pivot_id', 'desc');
}

간단한 설명

withPivot() 중간 테이블의 열을 탐색할 수 있습니다.withPivot()의 매개 변수는 그룹 형식으로 orderby() 에서 사용할 열을 지정합니다.orderBy()의 첫 번째 매개변수에는 "pivot_'+열 이름으로 지정합니다.

확인


favorite_posts()를 호출하기 전과 후에 다음 내용을 주의하여 실제 흐르는 SQL을 보십시오.
DB::enableQueryLog();
$user->favorite_posts;
dd(DB::getQueryLog());
array:1 [
  0 => array:3 [
    "query" => "select `posts`.*, `favorites`.`user_id` as `pivot_user_id`, `favorites`.`post_id` as `pivot_post_id`, `favorites`.`created_at` as `pivot_created_at`, `favorites`.`updated_at` as `pivot_updated_at`, `favorites`.`id` as `pivot_id` from `posts` inner join `favorites` on `posts`.`id` = `favorites`.`post_id` where `favorites`.`user_id` = ? order by `pivot_updated_at` desc, `pivot_created_at` desc, `pivot_id` desc"
    "bindings" => array:1 [
      0 => 1
    ]
    "time" => 0.37
  ]
]
중간표favoritesupdated_at,created_at,id에서orderby를 확인했다

참고 자료


https://readouble.com/laravel/5.8/ja/eloquent-relationships.html
https://stackoverflow.com/questions/26551078/how-to-order-by-pivot-table-data-in-laravels-eloquent-orm/50767168

좋은 웹페이지 즐겨찾기