為什麼我的 Laravel 5.2 Eloquent 模型的字串主鍵變成 0?

Susan Sarandon
發布: 2024-11-22 02:25:15
原創
444 人瀏覽過

Why Does My Laravel 5.2 Eloquent Model's String Primary Key Become 0?

Laravel 5.2:解決使用字串時主鍵遺失的問題

當嘗試在Laravel 5.2 中使用自訂字串作為Eloquent 表的主鍵時,主鍵鍵數值可能會令人驚訝地變成0。這種行為可能會令人費解且令人沮喪。

讓我們深入研究問題並找到解決方案:

問題描述

您有一個帶有基於字串的主鍵的表,並且您正在使用Eloquent與資料庫交互。當您基於主鍵使用first()檢索記錄時,結果物件中的主鍵值會變成0。

根本原因

問題在於Laravel的自動預設行為遞增主鍵。預設情況下,Laravel 假定主鍵是整數。從模型中檢索屬性時,它會檢查對應的列是否應轉換為整數。由於您的主鍵是一個字串,因此此轉換過程會將值變更為 0。

解決方案

要解決此問題,您需要明確指定您的主鍵不是自動遞增的,並且應被視為字串。為此,請將以下幾行加入您的Eloquent 模型類別:

protected $primaryKey = 'your_key_name';  // Your primary key name
public $incrementing = false;  // Disable auto-incrementing
登入後複製

對於Laravel 6.0 及更高版本:

除了上述之外,您還需要將$keyType 屬性設為'string':

protected $keyType = 'string';
登入後複製

透過這些設置,Laravel將正確地將您的主鍵視為字串並防止錯誤地轉換為整數。

其他注意事項

時間戳:

如果您的表沒有沒有時間戳,您應該在模型中將$timestamps 設為false以避免時間戳設定為'0000-00-00 00:00:00'。

$timestamps = false;
登入後複製

範例:

這是具有非自動遞增模型的更新範例字串主鍵:

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserVerification extends Model
{
    protected $table = 'user_verification';
    protected $fillable = ['email', 'verification_token'];
    //$timestamps = false;  // If your table doesn't have timestamps
    protected $primaryKey = 'verification_token';
    public $incrementing = false;
    protected $keyType = 'string';  // For Laravel 6.0+
}
登入後複製

透過這些更改,現在您應該能夠在Laravel 5.2 中成功使用基於字串的主鍵,而無需將主鍵值重設為0。

以上是為什麼我的 Laravel 5.2 Eloquent 模型的字串主鍵變成 0?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板