sql >> Database teknologi >  >> RDS >> Mysql

Laravel join med 3 borde

Jeg tror, ​​at din deltagelse er forkert:

$shares = DB::table('shares')
    ->join('users', 'users.id', '=', 'shares.user_id')
    ->join('followers', 'followers.user_id', '=', 'users.id')
    ->where('followers.follower_id', '=', 3)
    ->get();

Jeg foreslår dig også at navngive din tabel som follows i stedet føles det lidt mere naturligt at sige, at user has many followers through follows og user has many followees through follows .

Eksempel

$shares = DB::table('shares')
    ->join('users', 'users.id', '=', 'shares.user_id')
    ->join('follows', 'follows.user_id', '=', 'users.id')
    ->where('follows.follower_id', '=', 3)
    ->get();

Modeltilgang

Jeg var ikke klar over, at du brugte DB:: forespørgsler og ikke modeller. Så jeg retter svaret og giver meget mere klarhed. Jeg foreslår, at du bruger modeller, det er meget nemmere for dem, der begynder med rammen og især SQL.

Eksempel på modeller:

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');
    }
}

Eksempel på modelbrug:

$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;
}

// Retrieves all users I'm following
$my->followees;

// Retrieves all users that follows me
$my->followers;


  1. Omdøb Oracle Table eller View

  2. RoR:Kan ikke ændre_kolonne i postgres, fint i MySQL (MySQL til udvikling, Postgres på Heroku)

  3. Sådan installeres og sikres MariaDB 10 i CentOS 6

  4. Indlejret PostgreSQL til Java JUnit-tests