پیکسلر | شبکه اجتماعی برنامه نویسان

چند ترفند برای Laravel Timestamps

به طور پیش فرض ، مدل های 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();
2 دیدگاه
برای قرار دادن دیدگاه وارد شوید
arianzagrosmachinery 1 سال پیش

ممنون از شما ! سایت های لاراول از لحاظ سئو عملکرد خوبی دارند

سئو سایت به نحوه پیاده کردن درست قوانین سئو در کد بستگی داره. بستگی داره که آیا برنامه نویس این موارد رو در سایت به درستی پیاده کرده یا نه. فقط به خاطر اینکه سایت لاراولی هست دلیل بر عملکر خوب سئو نیست

سلام دنیا

آخرین پست های من
معرفی و توضیح کاربرد فانکشن ()explode در PHP 1 سال پیش