雄辩的表关系

时间:2014-09-02 00:36:01

标签: sql laravel foreign-keys eloquent table-relationships

我正在尝试提取属于某个用户的字符列表。当我发出请求时,我得到一个SQL错误。通过错误阅读它正在尝试我们不存在的字段。

错误:

 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”。问题是我无法找到Eloquent在哪个领域。我查看了源代码,并且有很多“如果没有提供使用$variable.'_id'。我找不到任何代码。

模型如下。

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

字符表中的user_id与users表中的id之间存在外键。

1 个答案:

答案 0 :(得分:1)

belongsToMany适用于many-to-many relations。 Laravel会抛出一个错误,因为它需要第三个表 - 数据透视表 - 包含character_id和user_id。

如果您不想要多对多但one-to-many,那么您应该使用hasMany和belongsTo。