當嘗試在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中文網其他相關文章!