Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Laravel bergabung dengan 3 Tabel

Saya yakin bergabung Anda salah:

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

Saya juga menyarankan Anda untuk memberi nama tabel Anda sebagai follows sebagai gantinya, terasa sedikit lebih alami untuk mengatakan user has many followers through follows dan user has many followers through follows .

Contoh

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

Pendekatan model

Saya tidak menyadari Anda menggunakan DB:: pertanyaan dan bukan model. Jadi saya memperbaiki jawabannya dan memberikan lebih banyak kejelasan. Saya sarankan Anda menggunakan model, jauh lebih mudah bagi mereka yang memulai dengan kerangka kerja dan khususnya SQL.

Contoh model:

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

Contoh penggunaan Model:

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. utf8 kacau saat mengimpor ke mysql

  2. Bagaimana menentukan mana yang lebih efektif:DISTINCT atau WHERE EXIST?

  3. Dapatkan hanya digit menggunakan regexp

  4. Apakah ada batasan panjang string di mysql?

  5. Apa jenis string ini? a:1:{s:2:id;}