>  기사  >  데이터 베이스  >  팔로우된 사용자의 게시물을 검색하기 위해 Laravel에서 세 개의 테이블을 효율적으로 조인하는 방법은 무엇입니까?

팔로우된 사용자의 게시물을 검색하기 위해 Laravel에서 세 개의 테이블을 효율적으로 조인하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-25 07:09:29955검색

How to Efficiently Join Three Tables in Laravel to Retrieve Posts from Followed Users?

Laravel: 데이터 검색을 위해 세 개의 테이블 조인

이 시나리오에서는 현재 사용자의 게시물을 표시해야 하는 Twitter와 같은 애플리케이션을 구축하고 있습니다. 사용자가 팔로우 중입니다. Users, Followers 및 Shares라는 세 개의 테이블이 있으므로 원하는 데이터를 검색하려면 효과적으로 조인하는 방법을 이해하는 것이 중요합니다.

목표는 Shares 테이블의 user_id가 일치하는 모든 공유를 검색하는 것입니다. Followers 테이블의 follower_id 및 Followers 테이블의 user_id는 Users 테이블의 id와 일치합니다.

Database Query Builder 사용

다음 쿼리를 사용해 보았습니다.

<code class="php">$shares = DB::table('shares')
    ->leftjoin('followers', 'shares.user_id', '=', 'followers.follower_id')
    ->leftjoin('users', 'followers.user_id', '=', 'users.id')
    ->where('users.id', 3)
    ->where('shares.user_id', 'followers.follower_id')
    ->get();</code>

그런데 이 쿼리의 문제는 공유와 팔로워의 가입 조건에 있습니다. 올바른 조인은 다음과 같습니다.

<code class="php">->leftjoin('followers', 'shares.user_id', '=', 'followers.user_id')</code>

향상된 기능을 위한 모델 사용

데이터베이스 쿼리 빌더를 사용하는 대신 데이터베이스 작업에 대한 보다 구조적이고 효율적인 접근 방식을 위해 Laravel 모델을 사용하는 것이 좋습니다. .

모델을 정의하는 방법은 다음과 같습니다.

<code class="php">class User extends Model {
    public function shares() {
        return $this->hasMany('Share');
    }
    public function followers() {
        return $this->belongsToMany('User', 'follows', 'user_id', 'follower_id');
    }
    public function followees() {
        return $this->belongsToMany('User', 'follows', 'follower_id', 'user_id');
    }
}
class Share extends Model {
    public function user() {
        return $this->belongsTo('User');
    }
}</code>

모델을 사용한 쿼리 실행

모델이 정의되면 다음과 같은 쿼리를 실행할 수 있습니다.

<code class="php">$my = User::find('my_id');

// Retrieves all shares by users that I follow
// eager loading the "owner" of the share
$shares = Share::with('user')
    ->join('follows', 'follows.user_id', '=', 'shares.user_id')
    ->where('follows.follower_id', '=', $my->id)
    ->get('shares.*'); // Notice the shares.* here

// prints the username of the person who shared something
foreach ($shares as $share) {
    echo $share->user->username;
}</code>

이 예에서 쿼리는 Shares 테이블의 user_id가 Followers 테이블의 follower_id와 일치하고 Followers 테이블의 user_id가 $my 변수에 저장된 현재 사용자 ID와 일치하는 모든 공유를 검색합니다.

위 내용은 팔로우된 사용자의 게시물을 검색하기 위해 Laravel에서 세 개의 테이블을 효율적으로 조인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.