2014-09-28 92 views
1

我正在使用Laravel 4,並且我正在努力建立多對多的關係。這是我想要做的一個例子。在這裏,我試圖建立用戶和組織之間的多對多關係。Laravel 4 belongsToMany關係退貨清空

這是我的遷移文件,創建一個用戶表,一個組織表和一個數據透視表以在兩者之間移動。

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

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

    Schema::create('organization_user', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->integer('organization_id')->unsigned()->index(); 
     $table->foreign('organization_id')->references('id')->on('organizations')->onDelete('cascade'); 
     $table->integer('user_id')->unsigned()->index(); 
     $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 
     $table->timestamps(); 
    }); 
} 

我也使用了默認的用戶模型,並添加了belongsToMany關係。

use Illuminate\Auth\UserTrait; 
    use Illuminate\Auth\UserInterface; 
    use Illuminate\Auth\Reminders\RemindableTrait; 
    use Illuminate\Auth\Reminders\RemindableInterface; 

    class User extends Eloquent implements UserInterface, RemindableInterface { 

     use UserTrait, RemindableTrait; 

     /** 
     * The database table used by the model. 
     * 
     * @var string 
     */ 
     protected $table = 'users'; 

     /** 
     * The attributes excluded from the model's JSON form. 
     * 
     * @var array 
     */ 
     protected $hidden = array('password', 'remember_token'); 

     public function organizations() 
     {   
      return $this->belongsToMany('Organization'); 
     } 

    } 

而且我創建了一個組織模型,關係走向相反的方向。

class Organization extends \Eloquent { 
    protected $fillable = ['name']; 

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

的問題是,如果我嘗試使用做一個查詢用戶::發現(1) - >組織(),當然在樣本數據相加後,它總是返回一個空數組,同使用Organization :: find(1) - > users()進行相反的操作。奇怪的部分是,如果我嘗試執行類似於Organization :: find(1) - > users() - > attach(1)的操作,它將在數據透視表中添加適當的行,以便知道關係在那裏。

關於爲什麼它似乎查詢不起作用的任何想法?

回答

1

這只是你訪問你的關係的方式。請嘗試執行以下操作:

$organisations = User::find(1)->organisations; 

$users = Organisation::find(1)->users; 

如果使用關係的方法版本,則還可以在查詢上添加更多內容。但要小心,你需要用get()後綴來實際執行查詢。

// The same as just accessing the property 
$organisations = User::find(1)->organisations()->get(); 

// With extra clauses 
$organisations = User::find(1)->organisations()->where('created_at', '>=', '2010-01-01 00:00:00')->get(); 
+0

太棒了,謝謝!我知道這會很簡單。 – 2014-09-29 01:49:22