我有一个表的书:有ID(int)和一个ISBN(string)的ISBN是一个独特的密钥。我在那里我存储的书籍中的ISBN另一个表。在这本书的模型我有函数:$ this->的hasMany( '其他', '国际标准书号', 'ISBN');
但是,忽略了书号。你知不知道这样做的方法吗?
临时的解决办法:
$this->primaryKey = 'isbn';
return $this->hasMany('Other', 'isbn');
这是不可能的 - 只有少数情况下,你想链接到一个独特的列在表上,是不是也该峰。这就是说,其他框架已经制定改变主键的方法,也没有人已正式要求它Laravel呢。您可以write up a proposal on GitHub,它可能会使它在给未来的版本。
看你的了一会儿具体的例子 - 这可能有意想不到的结局,当你来到使用预先加载的情况下的关系,它只占关系的一个侧面。当您在其他加入属于关联你就会有相反的问题。
有可能设置通过ISBN的关系;然而这将需要预订hasOne书号,书号属于关联图书,书号的hasMany其他人,其他属于关联ISBN的形式;和访问性能会是什么样子$book->isbn->others
或$other->isbn->book
。
我最后的建议是延长图书,并设置新类的主键isbn
和基础上,该模型所有关系。它的效果并不理想,但它是痛苦少其他的一些解决方案。
迷迷糊糊了同样的问题最近,我还没有确定这是否会工作,但作为一个理念:
class Book {
public function isbn() {
// instead of hasMany
return ISBN::where('isbn', $this->isbn);
}
}
如果我读这个权利,你可以通过覆盖getKeyName实现这一目标。
public function getKeyName(){
return $yourKeyName;
}