اذا كان الموديل لا يحتوي على حقول timestamp الإفتراضية
إيثار شروف
21 يناير 2024 دقيقة واحدة 3,213 مشاهدة 1 تعليق
إذا كان الجدول لا يحتوي على حقول timestampالإفتراضية وهي updated_at, created_at يجب إعلام الـ modeبذلك من خلال $temestamps=false
class Company extends Model{
public $timestamps = false;
}
شارك المقال:
التعليقات (1)
ز
زيد
ما السبب في ضرورة الإعلام في الموديل بأن الجدول لا يحتوي هذه الحقول ؟
إيثار شروف
سؤال ممتاز. السبب أن Eloquent يفترض افتراضيًا أن كل جدول يحتوي على الحقلين created_at وupdated_at، ويقوم تلقائيًا بمحاولة تعبئتهما في كل مرة يتم فيها حفظ (save) أو إنشاء (create) أو تعديل (update) سجل، دون أن تطلب منه ذلك صراحة.
فإذا كان الجدول الفعلي في قاعدة البيانات لا يحتوي على هذين الحقلين، وحاول Eloquent تعبئتهما، ستحصل على خطأ SQL مشابه لهذا:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list'
بمعنى آخر، العملية ستفشل بالكامل عند أي محاولة حفظ أو تعديل، رغم أن باقي الكود صحيح تمامًا. لهذا السبب نحتاج لإخبار الموديل صراحةً بأن الجدول لا يحتوي على هذين الحقلين، عبر:
public $timestamps = false;
بهذا التصريح، يتوقف Eloquent عن محاولة قراءة أو كتابة created_at وupdated_at نهائيًا، ويتعامل مع الجدول بشكل طبيعي دون أي أخطاء.
ما السبب في ضرورة الإعلام في الموديل بأن الجدول لا يحتوي هذه الحقول ؟
سؤال ممتاز. السبب أن Eloquent يفترض افتراضيًا أن كل جدول يحتوي على الحقلين created_at وupdated_at، ويقوم تلقائيًا بمحاولة تعبئتهما في كل مرة يتم فيها حفظ (save) أو إنشاء (create) أو تعديل (update) سجل، دون أن تطلب منه ذلك صراحة.
فإذا كان الجدول الفعلي في قاعدة البيانات لا يحتوي على هذين الحقلين، وحاول Eloquent تعبئتهما، ستحصل على خطأ SQL مشابه لهذا:
بمعنى آخر، العملية ستفشل بالكامل عند أي محاولة حفظ أو تعديل، رغم أن باقي الكود صحيح تمامًا. لهذا السبب نحتاج لإخبار الموديل صراحةً بأن الجدول لا يحتوي على هذين الحقلين، عبر:
بهذا التصريح، يتوقف Eloquent عن محاولة قراءة أو كتابة created_at وupdated_at نهائيًا، ويتعامل مع الجدول بشكل طبيعي دون أي أخطاء.