簡體   English   中英

我可以更改我的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM