به طور پیش فرض ، مدل های Laravel Eloquent فرض می کنند جدول شما دارای ستون های created_at و updated_at است. البته لاراول برای شما امکاناتی فراهم کرده تا این فیلدها را شخصی سازی کنید و یا کارهای جالبی با آن ها انجام دهید.
غیر فعال کردن Timestamps
اگر جدول دیتابیس شما ستون های مربوط به زمان ایجاد و یا زمان آپدیت را نداشته باشد و شما سعی کنید کد Model::create($arrayOfValues);
را اجرا کنید، خطای SQL دریافت خواهید کرد. لاراول تلاش خواهد کرد تا بصورت خودکار فیلدهای Created_at / updated_at را پر کند اما آنها را پیدا نمی کند.
برای غیرفعال کردن پر شدن خودکار این فیلدها، در مدل Eloquent خود باید یک ویژگی اضافه کنید:
class Role extends Model{
public $timestamps = FALSE;
// ... other model properties and methods
}
تغییر نام ستونTIMESTAMP
در صورتی که جدول شما برای سنجش زمان ایجاد و آپدیت از نام های دیگری استفاده می کند شما می توانید به صورت زیر این دو نام پیش فرض را تغییر دهید.
class Role extends Model{
const CREATED_AT = 'create_time';
const UPDATED_AT = 'update_time';
تغییر فرمت Date/Time
اگر می خواهید فرمت timestamps را تغییر دهید ویژگی $dateFormat
در مدل خود را به فرمت دلخواه تنظیم کنید. این ویژگی نحوه ذخیره ویژگی های تاریخ در دیتابیس و همچنین فرمت آنها هنگام سریالایز شدن مدل در آرایه یا JSON را تعیین می کند:
class Flight extends Model
{
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat="U";
}
:MANY-TO-MANY جدول Pivot به همراه Timestamps
لاراول در پرکردن خودکار ستون های زمان استثناهایی هم قائل شده است. برای مثال زمانی که از جدول Pivot برای رابطه many-to-many استفاده می کنید. مثل جدول role_user که جداول users و roles را به هم مرتبط می کند. در مدل خود، رابطه را به صورت زیر تعریف می کنید:
class User extends Model{
public function roles(){
return $this->belongsToMany(Role::class);
}
}
و سپس، هنگامی که می خواهید نقشی را به یک کاربر اضافه کنید، چنین کاری انجام می دهید:
$roleID = 1;$user->roles()->attach($roleID);
در لاراول به طور پیش فرض، جدول pivot ستون timestamps ندارد و لاراول نیز تلاشی برای پر کردن ستون های زمان نمی کند.اما اگر می خواهید timestamps را به طور خودکار ذخیره کنید، باید آنها را در فایل migration اضافه کنید و سپس در جایی که رابطه را تعریف کرده اید
->withTimestamps();
را اضافه کنید:
public function roles(){
return $this->belongsToMany(Role::class)->withTimestamps();
}
مرتب سازی Timestamps با latest() و oldest()
برای مرتب سازی timestamps دو میانبر وجود دارد.
بجای:
User::orderBy('created_at', 'desc')->get();
می توانید بنویسید:
User::latest()->get();
برای انجام عکس این عمل و مرتب سازی براساس قدیمی ترین می توانید بنویسید:
User::oldest()->get();
این مرتب سازی ها به صورت پیش فرض براساس ستون created_at ایجاد می شوند و در صورتی که می خواهید این کار براساس updated_at صورت گیرد به صورت زیر عمل کنید:
$lastUpdatedUser = User::newest('updated_at')->first();
بروزرسانی خودکار updated_at
هر زمان که به کمک دستورات Eloquent ستونی را در جدول خود بروزرسانی می کنید، به طور خودکار ستون updated_at نیز بروزرسانی می شود. در صورتی که می خواهید از این ویژگی استفاده نکنید کافی است در زمان بروزرسانی جدول دیتابیس به صورت زیر عمل کنید:
$user = User::find(1);
$user->profile_views_count = 123;
$user->timestamps = false;
$user->save();
ممنون از شما ! سایت های لاراول از لحاظ سئو عملکرد خوبی دارند