2014-07-09 2 views
0

사용자가 투표를 만들고 투표 할 수있는 Laravel 4에서 수행되는 webapp가 있습니다. 사용자를위한Laravel 4의 M : N 관계

public function up() { 
    Schema::create('polls', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->string('topic'); 
     $table->timestamps(); 
    }); 
} 

마이그레이션 : : 여론 조사에 대한

마이그레이션 : 이제

public function up() { 
    Schema::create('users', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->string('email'); 
     $table->string('password'); 
     $table->timestamps(); 
    }); 
} 

: 이것은 (단순화)을 마이그레이션입니다 I 때 기록을 유지하려는

사용자가 설문 조사에 투표합니다 (다시 투표 할 수 없습니다).

나는 M : N 테이블을 사용해야한다고 생각합니다.

| User ID | Poll ID | 
|---------|-----------| 
|  1 |   5 | 
|  1 |   7 | 
|  1 |   8 | 
|  3 |   5 | 
|  ... |  ... | 

그러나 Laravel이 설득력 ORM을 사용하여, 나는 belongsToMany 또는 hasMany 같은 함수가 읽고 : 좀이있다. 그래서, 궁금 해서요 :

개발 및 유지 관리를 단순화하기 위해 이런 종류의 "관계 테이블"을 설정하는 관례 또는 "영리한"방법이 있습니까?

답변

2

예. 다 대다 관계를 작동 시키려면 3 개의 표가 필요합니다. belongsToMany 함수는 단지 데이터를 가져 오는 방법을 설득력있게 말하고 있습니다.

jeffrey way's laravel generator 패키지를 사용하는 경우 연결 테이블을 만들려면 다음 명령을 사용하면됩니다. N 테이블 : 당신의 모델에 다음

php artisan generate:pivot polls users 

이에 따라

// poll model 
public function users() 
{ 
    return $this->belongsToMany('User'); 
} 

// user model 
public function poll() 
{ 
    return $this->belongsToMany('Poll'); 
} 
+0

이 :) 매우 불량한입니다 자동으로 채우는 M을하는 방법이 있나요 추가? 아니면 수동으로해야합니까? –

+1

[씨앗] (http://laravel.com/docs/migrations#database-seeding)을 사용하여 원하는대로 추가 할 수 있습니다 (예 :'$ poll-> users() -> saveMany ($ users) '등 여러 가지 가능성이있다) – zwacky

+0

나는 seeding이 데이터베이스에 초기 값을주는 것에 관한 것이라고 생각했다. 이 문제와 관련이 있는지 확실하지 않습니다. –