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;