2016-04-06 12 views
1

私はループテーブルのためのお気に入り」機能を持っています。私はピボットテーブルでこれを達成しようとしています。しかし、今、私はすべての説得力でループをお気に入り化(favourited)ログインユーザを呼び出すための最も効率的な方法を見つけようとしています。どのように説得力を持つピボットテーブル内の特定のプロパティを持つすべてのアイテムを取得しますか?

ループテーブル:

Schema::create('loops', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name', 35); 
     $table->string('loop_path', 255); 
     $table->string('FK_user_id'); 
    }); 

ユーザテーブル:

Schema::create('users', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('password', 60); 
    }); 

お気に入りテーブル:

Schema::create('favourites', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('FK_user_id')->unsigned(); 
     $table->integer('FK_loop_id')->unsigned(); 
    }); 

Loop.php:

class Loop extends Model { 

    protected $table = 'loops'; 
    public $timestamps = true; 

    public function user() 
    { 
     return $this->belongsTo('App\User','FK_user_id','id'); 
    } 

    public function favourites() 
    { 
     return $this->belongsToMany('App\User', 'favourites', 'FK_loop_id', 'FK_user_id'); 
    } 

} 

これは私が今これを達成する方法であるが、効率的でいないようです:

$loops = Loop::with('favourites')-> 
        with('user')->get(); 

    $favouritedLoops = array(); 

    foreach($loops as $loop) 
    { 
     //check if logged in user has favourited this 
     $user_favorites = Favourite::where('FK_user_id', '=', Auth::user()->id) 
      ->where('FK_loop_id', '=', $loop->id) 
      ->first(); 

     if ($user_favorites != null) 
     { 
      array_push($favouritedLoops, $loop); 
     } 

    } 

    return Response::json($favouritedLoops); 
+0

は、あなたがこのように意味しますか? –

答えて

1

あなたは、あなたがすることができ、UserモデルでfavouritedLoops方法を定義する必要がありますすべてのお気に入りのループに簡単にアクセスできます。

User.php

public function favouritedLoops() 
{ 
    return $this->belongsToMany('App\Loop', 'favourites', 'FK_user_id', 'FK_loop_id'); 
} 

とのようになります。今すぐ戻る: return Response::json(Auth::user()->favouritedLoops);

+0

私はこのしようとしているとき、私はこのエラーを取得する:構文エラーまたはアクセス違反:1066ユニークでないテーブル/別名:「お気に入り」(SQL: 'favourites'を選択*、' 'pivot_FK_user_id'としてfavourites'.'FK_user_id'を、 : 'favourites'インナー' favourites'.'id' = '' favourites'.'FK_loop_id' favourites'.'FK_user_id' = 1) –

+0

おっと上 'favourites'に参加から' pivot_FK_loop_id'として 'favourites'.'FK_loop_id' )現在は修正私のコードに誤りがありました。 –

関連する問題