用户表:
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";
答案 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');
希望这对你有用!