![](/img/trans.png)
[英]How can I map a relationship with two options as a foreign key in Laravel?
[英]Can I change default foreign key for my Laravel Relationship?
我目前正在開發一個使用 Laravel 的項目,但沒有使用關系。
我在幾個月前設置了它們,但是沒有一個表 id 設置為variable_id
而是id_variable
。
我引用 Laravel 文檔。
Eloquent 根據父模型名稱確定關系的外鍵。
在這種情況下, Phone
模型被自動假定為具有user_id
外鍵。 如果您希望覆蓋此約定,您可以將第二個參數傳遞給hasOne
方法。
所以這就是我在任何地方所做的,但我想知道我是否可以將默認 id 鍵設置為模型? 以用戶模型為例:
類似的東西
default_foreign_key : 'id_user'
所以當我寫
return $this->hasOne(User::class);
它使用id_user
而不是user_id
。
Laravel 具有關系/數據庫鍵的命名約定,但您可以定義自定義鍵,如 一對一文檔中所述
您可以設置外鍵名稱:
$this->hasOne(Phone::class, 'foreign_key');
甚至你可以在兩邊定義鍵名:
$this->hasOne(Phone::class, 'foreign_key', 'local_key');
是的,您可以根據需要添加外鍵:
$this->hasOne(User::class,'id_user');
您可以創建一個從模型擴展的抽象類並在其中覆蓋此方法:
public function getForeignKey()
{
return Str::snake(class_basename($this)).'_'.$this->getKeyName();
}
然后從此自定義模型擴展您的模型。 (隨意命名)。 我認為這應該對你有用。
對於您的要求,我認為方法內部的代碼應該是這樣的:
return $this->getKeyName().'_'.Str::snake(class_basename($this));
是的,你也可以在 Laravel 文檔中提到它
$this->hasOne(User::class, 'foreign_key', 'local_key');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.