Mengapa Kunci Utama Laravel 5.2 Model Eloquent Saya Menjadi 0?

Susan Sarandon
Lepaskan: 2024-11-22 02:25:15
asal
434 orang telah melayarinya

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

Laravel 5.2: Menyelesaikan Kehilangan Kunci Utama Apabila Menggunakan Rentetan

Apabila cuba menggunakan rentetan tersuai sebagai kunci utama untuk jadual Eloquent dalam Laravel 5.2, yang utama nilai kunci mungkin secara mengejutkan bertukar kepada 0. Tingkah laku ini boleh membingungkan dan mengecewakan.

Mari kita mendalami masalah ini dan cari penyelesaian:

Penerangan Masalah

Anda mempunyai jadual dengan kunci utama berasaskan rentetan dan anda menggunakan Eloquent untuk berinteraksi dengan pangkalan data. Apabila anda mendapatkan semula rekod menggunakan first() berdasarkan kunci utama, nilai kunci primer menjadi 0 dalam objek yang terhasil.

Punca Punca

Isunya terletak pada tingkah laku lalai Laravel untuk auto- menambah kunci utama. Secara lalai, Laravel menganggap kunci utama sebagai integer. Apabila mendapatkan semula atribut daripada model, ia menyemak sama ada lajur yang sepadan harus dibuang sebagai integer. Memandangkan kunci utama anda ialah rentetan, proses penghantaran ini menukar nilai kepada 0.

Penyelesaian

Untuk menyelesaikan isu ini, anda perlu menyatakan secara eksplisit bahawa kunci utama anda bukan auto-increment dan harus dianggap sebagai rentetan. Untuk melakukan ini, tambahkan baris berikut pada kelas model Eloquent anda:

protected $primaryKey = 'your_key_name';  // Your primary key name
public $incrementing = false;  // Disable auto-incrementing
Salin selepas log masuk

Untuk Laravel 6.0 dan ke atas:

Selain perkara di atas, anda juga perlu untuk menetapkan sifat $keyType kepada 'rentetan':

protected $keyType = 'string';
Salin selepas log masuk

Dengan tetapan ini, Laravel akan merawat anda dengan betul kunci utama sebagai rentetan dan menghalang penghantaran yang salah kepada integer.

Pertimbangan Tambahan

Cap Masa:

Jika jadual anda tidak mempunyai cap masa, anda harus menetapkan $timestamps kepada false dalam model anda untuk mengelakkan masalah dengan cap masa ditetapkan kepada '0000-00-00 00:00:00'.

$timestamps = false;
Salin selepas log masuk

Contoh:

Berikut ialah contoh model yang dikemas kini dengan bukan penambahan automatik kunci utama rentetan:

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+
}
Salin selepas log masuk

Dengan perubahan ini, anda kini boleh berjaya bekerja dengan kunci utama berasaskan rentetan dalam Laravel 5.2 tanpa nilai kunci utama ditetapkan semula kepada 0.

Atas ialah kandungan terperinci Mengapa Kunci Utama Laravel 5.2 Model Eloquent Saya Menjadi 0?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan