Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tham gia Laravel với 3 Bảng

Tôi tin rằng sự tham gia của bạn là sai:

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

Tôi cũng khuyên bạn nên đặt tên bảng của mình là follows thay vào đó, sẽ tự nhiên hơn một chút khi nói rằng người dùng user has many followers through follows và người dùng user has many followers through follows .

Ví dụ

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

Cách tiếp cận mô hình

Tôi không nhận ra bạn đang sử dụng DB:: truy vấn và không phải mô hình. Vì vậy, tôi đang sửa câu trả lời và cung cấp nhiều điều rõ ràng hơn. Tôi khuyên bạn nên sử dụng các mô hình, sẽ dễ dàng hơn rất nhiều cho những người bắt đầu với khuôn khổ và đặc biệt là SQL.

Ví dụ về các mô hình:

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

Ví dụ về cách sử dụng Mô hình:

$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. Cập nhật câu lệnh trong MySQL bằng C #

  2. Hướng dẫn toàn diện về cách sử dụng MySQL

  3. MySQL sử dụng tên cột từ một bảng khác

  4. Làm thế nào để lưu trữ một giá trị phần trăm?

  5. LỖI:HHH000299:Không thể hoàn tất cập nhật giản đồ java.lang.NullPointerException