मेरा मानना है कि आपका शामिल होना गलत है:
$shares = DB::table('shares')
->join('users', 'users.id', '=', 'shares.user_id')
->join('followers', 'followers.user_id', '=', 'users.id')
->where('followers.follower_id', '=', 3)
->get();
मेरा यह भी सुझाव है कि आप अपनी तालिका को follows
. नाम दें इसके बजाय, यह कहना थोड़ा अधिक स्वाभाविक लगता है कि user has many followers through follows
और user has many followees through follows
।
उदाहरण
$shares = DB::table('shares')
->join('users', 'users.id', '=', 'shares.user_id')
->join('follows', 'follows.user_id', '=', 'users.id')
->where('follows.follower_id', '=', 3)
->get();
मॉडल दृष्टिकोण
मुझे नहीं पता था कि आप DB::
. का उपयोग कर रहे हैं प्रश्न और मॉडल नहीं। इसलिए मैं उत्तर को ठीक कर रहा हूं और बहुत अधिक स्पष्टता प्रदान कर रहा हूं। मेरा सुझाव है कि आप मॉडल का उपयोग करें, यह उन लोगों के लिए बहुत आसान है जो फ्रेमवर्क और विशेष रूप से SQL से शुरू करते हैं।
मॉडल का उदाहरण:
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');
}
}
मॉडल उपयोग का उदाहरण:
$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;