我有一張表書籍:有一個ID(int)和一個ISBN(字符串),ISBN是唯一鍵。我還有另一張桌子,我在那裏儲存了這本書的內容。我有: $ this-> hasMany('Other','isbn','isbn');雄辯:在另一個關係上使用另一列作爲主鍵
但是,這忽略了isbn。你知道這樣做的任何方式嗎?
臨時的解決辦法:
$this->primaryKey = 'isbn';
return $this->hasMany('Other', 'isbn');
我有一張表書籍:有一個ID(int)和一個ISBN(字符串),ISBN是唯一鍵。我還有另一張桌子,我在那裏儲存了這本書的內容。我有: $ this-> hasMany('Other','isbn','isbn');雄辯:在另一個關係上使用另一列作爲主鍵
但是,這忽略了isbn。你知道這樣做的任何方式嗎?
臨時的解決辦法:
$this->primaryKey = 'isbn';
return $this->hasMany('Other', 'isbn');
這是不可能的 - 只有少數情況下,你想鏈接到一個獨特的列在表上,是不是也該峯。也就是說,其他框架已經開發出改變主鍵的方法,而且還沒有人正式向Laravel提出要求。你可以write up a proposal on GitHub,它可能會使它未來的版本。
看你的了一會兒具體的例子 - 這可能有意想不到的結局,當你來到使用預先加載的情況下的關係,它只佔關係的一個側面。當你在Other上添加belongsTo時,你會遇到相反的問題。
可以通過isbn建立關係;然而,這將採取書的形式,書號,書號歸屬於書籍,ISBN有許多其他,其他屬於ISBN;並訪問屬性將看起來像$book->isbn->others
或$other->isbn->book
。
我最後的建議是擴展Book,並將新類的主鍵設置爲isbn
,並將所有關係建立在該模型上。這並不理想,但其他一些解決方案可能不會那麼痛苦。
跌進了同樣的問題最近,我還沒有確定這是否會工作,但作爲一個理念:
class Book {
public function isbn() {
// instead of hasMany
return ISBN::where('isbn', $this->isbn);
}
}
我確實相信你最後錯過了' - > get()'方法。我對嗎 ? – frenus
簡短的回答是 - 你不能。但是可能有解決方案。你能解釋你的模式嗎?爲什麼你不能把'book_id'作爲你的fk? –
這是一個現有的數據庫,它很糟糕(這不是唯一的問題) –