2014-09-02 3 views
1

J'essaie de tirer une liste de caractères qui appartiennent à un certain utilisateur. Lorsque je fais la demande, je reçois une erreur SQL. En lisant l'erreur, nous essayons de trouver des champs qui n'existent pas.Relations de table éloquentes

Erreur:

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'characters' (SQL: select `characters`.*, `characters`.`id` as `pivot_id`, 
`characters`.`character_id` as `pivot_character_id` 
from `characters` inner join `characters` on `characters`.`id` = `characters`.`character_id` where `characters`.`id` = 1) 

"character_id" n'existe pas dans ma base de données. Le problème est que je ne peux pas trouver où Eloquent fait ce champ. Je regardais à travers le code source et il y avait beaucoup de « Si ce n'est pas fourni l'utilisation $variable.'_id'. Je ne pouvais pas trouver ce code partout pour ce bien.

Les modèles sont ci-dessous.

class Character extends Eloquent { 

    protected $guarded = array('id'); 

    protected $table = 'characters'; 

    public function User() 
    { 
     return $this->belongsTo('User', 'id'); 
    } 
} 


class User extends Eloquent implements UserInterface, RemindableInterface { 

    use UserTrait, RemindableTrait; 

    protected $table = 'users'; 

    protected $hidden = ['password', 'remember_token']; 

    protected $guarded = ['password']; 

    public function Character() 
    { 
     return $this->belongsToMany('Character', 'characters', 'id'); 
    } 
}  

Il y a un . clé étrangère entre user_id les caractères table, et id dans la table des utilisateurs

+0

alors vous n'avez que deux tables? –

+0

Oui, devrais-je en avoir plus? –

Répondre

1

belongsToMany est pour many-to-many relations Laravel vous renvoie une erreur car elle attend troisième table -. tableau croisé dynamique -. contenant à la fois character_id et user_id

Si vous ne voulez pas beaucoup-à-plusieurs mais one-to-many alors vous devriez utiliser hasMany et belongsTo.

+0

Merci! Fonctionne maintenant. –