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);
}
}
}