2016-11-18 15 views
0

ピボットテーブルを使用して2つのテーブルからデータを取得するにはどうすればよいですか?たとえば私の場合、私はピボットテーブル(ペニステーブル)を使用してジャーナルテーブルに接続されたユーザーテーブルを持っています。今私は特定のユーザーに属するジャーナルのデータを取得したいと思います。私はこれを試した:ピボットテーブル(Laravel 5.3)を使用して2つのテーブルからデータを取得

$journal_list = DB::table('journal')->where('id_user', '=','id_journal')->orderBy('id', 'desc')->paginate(20); 

上記のコードは動作しません。以下は、私の移行は、次のとおりです。

Usersテーブル:

public function up() 
    { 
     Schema::create('users', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('name'); 
      $table->string('username')->unique(); 
      $table->string('userslug'); 
      $table->string('nameslug'); 
      $table->string('email')->unique(); 
      $table->string('phone')->nullable(); 
      $table->string('address')->nullable(); 
      $table->string('password'); 
      $table->rememberToken(); 
      $table->enum('level', ['admin', 'author']); 
      $table->timestamps(); 
     }); 
    } 

ジャーナルテーブル:

public function up() { 
     Schema::create('journal', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('title', 255); 
      $table->text('abstract'); 
      $table->text('file'); 
      $table->integer('id_edition')->unsigned(); 
      $table->string('journalslug'); 
      $table->timestamps(); 
     }); 
    } 

Penulisテーブル(ピボットテーブル)

public function up() 
    { 
     Schema::create('penulis', function (Blueprint $table) { 
      // Create tabel penulis 
      $table->integer('id_user')->unsigned()->index(); 
      $table->integer('id_journal')->unsigned()->index(); 
      $table->timestamps(); 

      // Set PK 
      $table->primary(['id_user', 'id_journal']); 

      // Set FK penulis --- user 
      $table->foreign('id_user') 
        ->references('id') 
        ->on('users') 
        ->onDelete('cascade') 
        ->onUpdate('cascade'); 

      // Set FK penulis --- journal 
      $table->foreign('id_journal') 
        ->references('id') 
        ->on('journal') 
        ->onDelete('cascade') 
        ->onUpdate('cascade'); 
     }); 
    } 

のView Composer:

public function boot() 
    { 
     View::composer('user/show', function ($view) { 
      $journal_list = User::where('id', $user_id)->with('journal')->first(); 
      $view->with('journal_list', $journal_list); 
     }); 
    } 
+0

あなたは自分の答えのコードを(View Composerの部分に)コピーしましたが、それはあなたのために働くかどうかは決して言いませんでした。それで、それは問題を解決しますか?そうでない場合は、エラーが発生しますか? –

+0

私に「undefined variable userID」というエラーが表示されました。私は雄弁を使用したくないので、ビュー・コンポーザーを通してデータを渡したかったのです。私はビューの作曲家@Alexeyの質問を更新しました –

答えて

1

あなたが雄弁を使用する場合は、最初のセットアップbelongsToMany()関係する必要があります

class User extends Authenticatable 
{ 

    public function journals() 
    { 
     return $this->belongsToMany('App\Journal'); 
    } 

次にデータをロードするために積極的なロードを使用します。

User::where('id', $userId)->with('journals')->first(); 

あなたが雄弁を使用しない場合とジャーナルが必要です。

$journal_ids = DB::table('penulis')->where('id_user', $userId)->get(['id_journal'])->toArray(); 
$journal_list = DB::table('journal')->whereIn('id', $journal_ids)->paginate(20); 

join()を使って同じことをしてください。あなたが最初にあなたがtable nameとあなたのモデルでtablefillablesを定義する必要があります。もちろん、あなたのモデルでrelations

class User extends Model { 

    public function journal(){ 
     return $this->belongsToMany('App\Journal', 'penulis', 'id_user', 'id_journal'); 
    } 

} 


class Journal extends Model { 

    public function user(){ 
     return $this->belongsToMany('App\User', 'penulis', 'id_journal', 'id_user'); 
    } 

} 

を定義Laravel

を使用している場合

+0

これを試して、私に "undefined variable userID"というエラーを与えました。私は雄弁を使用したくないので、ビュー・コンポーザーを通してデータを渡したかったのです。ビューコンポーザー –

+0

@AriandoMillerで質問を更新しました。データを渡すには、まずデータを取得する必要があります。 '未定義の変数userID'というエラーメッセージが表示された場合、現在のユーザーIDを取得するには' $ userId = 5'または '$ userId = auth() - > user() - > id'のように設定してください。 Eloquentを使用したくない場合は、私の答えから非Eloquentコードを試してください。 –

+0

私は両方を試みましたが、特定のユーザーに所属するジャーナルデータは表示されません。おそらく、私はユーザーIDを使いこなしたのだろうか?私は現在のユーザーIDを取得するのではなく、選択したユーザーIDを取得したいと考えています.Jon DoeのプロファイルをクリックするとJon Doeの連絡担当者のデータが彼に属するジャーナルと共に表示されます –

0

Eloquentの使用をしないのはなぜとそれぞれtable columnsである。これがロードされます

User::with('journal')->paginate(20); 

そして、あなたが雄弁に使用できるusersに関連する特定のデータを取得するには、関連journalデータと20 users(paginated)

雄弁な関係についてさらに知りたい場合は、linkをご覧ください。

あなたの問題を解決することを願っています。

+0

私はまったく同じそれは動作しません –

+0

@AriandoMillerエラーが発生しますか? –

+0

いいえ、関連するデータは表示されません –

関連する問題