Mysql
 sql >> база данни >  >> RDS >> Mysql

Laravel се присъединява с 3 таблици

Вярвам, че присъединяването ви е грешно:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво точно означава M,D в десетична (M,D)?

  2. Мога ли да накарам WHERE col LIKE '%' също да избира NULL стойности?

  3. JDBC връзка – Class.forName срещу Class.forName().newInstance?

  4. В PHP с PDO, как да проверя окончателната SQL параметризирана заявка?

  5. Как да изтрия mysql база данни чрез shell команда