Laravel关系指向UNIQUE约束的外键

时间:2017-01-13 09:01:21

标签: php laravel laravel-5.3

用户表:

id    int primary key, auto increment
r_id  varchar unique
name  varchar

书籍表:

id       int primary key, auto increment
user_id  foreign key to r_id in users table
name     varchar

用户模型中的关系:

return $this->hasMany('App\Book', 'user_id');

默认情况下,user_id FOREIGN KEY指向PRIMARY KEY id。我怎样才能指向一个独特的r_id

如果只有r_id是主键,我们可以使用第三个参数传递它并覆盖$primaryKey属性:

return $this->hasMany('App\Book', 'user_id','r_id');
protected $primaryKey = "r_id";

2 个答案:

答案 0 :(得分:1)

默认情况下,Eloquent orm希望本地密钥为id。要覆盖它,您可以在关系中传递第三个参数。

https://laravel.com/docs/5.2/eloquent-relationships#one-to-many

$this->hasMany('App\Model', 'foreign_key', 'local_key')

所以,你的关系可以是

return $this->hasMany('App\Book', 'user_id', 'r_id');

更新

我记得,最近我遇到了类似的情况。你可以尝试这个并让我回来。我稍后会详细更新答案。在用户模型中添加以下方法并进行测试。感谢

public function getRIdAttribute($value)
{
    return $value;
}

答案 1 :(得分:0)

我认为您的代码需要更新如下:

 return $this->hasMany('App\Book');

希望这对你有用!