2014-06-06 3 views
0

J'implémente l'authentification avec Laravel 4 et MongoDB, en utilisant https://github.com/jenssegers/Laravel-MongoDB comme backend.Laravel 4 relations avec MongoDB

Mon modèle d'utilisateur est comme ceci:

use Illuminate\Auth\UserInterface; 

/** 
* Class User 
* @property string $username 
* @property string $password 
*/ 
class User extends Moloquent implements UserInterface { 

    /** 
    * Primary key for collection 
    * 
    * @var string 
    */ 
    protected $primaryKey = 'username'; 

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

    /** 
    * Relationship with role 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\HasOne 
    */ 
    public function role() { 
     return $this->belongsTo('Role'); 
    } 

    /** 
    * Get the unique identifier for the user. 
    * 
    * @return mixed 
    */ 
    public function getAuthIdentifier() 
    { 
     return $this->username; 
    } 

    /** 
    * Get the password for the user. 
    * 
    * @return string 
    */ 
    public function getAuthPassword() 
    { 
     return $this->password; 
    } 

    /** 
    * Get the token value for the "remember me" session. 
    * 
    * @return string 
    */ 
    public function getRememberToken() 
    { 
     return $this->remember_token; 
    } 

    /** 
    * Set the token value for the "remember me" session. 
    * 
    * @param string $value 
    * @return void 
    */ 
    public function setRememberToken($value) 
    { 
     $this->remember_token = $value; 
    } 

    /** 
    * Get the column name for the "remember me" token. 
    * 
    * @return string 
    */ 
    public function getRememberTokenName() 
    { 
     return 'remember_token'; 
    } 

} 

ce qui est mon modèle:

/** 
* Class Role 
* @property string name 
*/ 
class Role extends Moloquent { 

    /** 
    * Primary key for collection 
    * 
    * @var string 
    */ 
    protected $primaryKey = 'name'; 

    /** 
    * Collection name for role 
    * 
    * @var string 
    */ 
    protected $collection = 'roles'; 

    /** 
    * Relationship with users 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany 
    */ 
    public function users() { 
     return $this->belongsToMany('User'); 
    } 
} 

Comme vous pouvez le voir, mes utilisateurs ont seulement username et password et les rôles ont seulement name.

Problème est, comment enregistrer les modèles connexes? J'ai essayé beaucoup de manières, comme dans la documentation de Laravel Eloqoent, comme $user->role()->save($role) ou attach au lieu de save, mais seulement $role->users()->save($user) fonctionne très bien. Pourquoi? Tout le monde ne devrait-il pas travailler? Je ne semble pas comprendre les concepts relationnels de Laravel très bien.

Une autre chose est de savoir comment obtenir les rôles d'un utilisateur? Par exemple:

$user = Auth::user(); 
var_dump($user->role()->get()); 

donne une collection vide. Cela ne devrait-il pas me donner le rôle de l'utilisateur?

Je suis confus beaucoup!

Merci d'avance.

EDIT: Voici mon ensemencement:

class RoleTableSeeder extends Seeder { 

    public function run() { 
     $adminRole = Role::where('name', 'admin')->first(); 
     if(empty($adminRole)) { 
      Role::create(array(
       'name' => 'admin', 
      )); 
      Role::create(array(
       'name' => 'superuser', 
      )); 
      Role::create(array(
       'name' => 'user', 
      )); 
     } 
    } 
} 


class UserTableSeeder extends Seeder { 

    public function run() { 
     $admin = User::where('name', 'admin')->first(); 
     if(empty($admin)) { 
      $role = Role::where('name', 'admin')->first(); 

      $admin = new User(); 
      $admin->username = 'admin'; 
      $admin->password = Hash::make('[email protected]%%'); 
      $admin->save(); 

      $role->users()->attach($admin); 
     } 
    } 
} 

Répondre

0

IM ne sais pas pourquoi le rôle de l'économie ne fonctionne pas, vous pouvez peut-être donner plus d'informations, mais vous pouvez aussi essayer $user->role()->create($role).

Mais assurez-vous que la $ role est un objet éloquent.

Lors de l'obtention de rôles utilisateur, vous devez utiliser $user->roles