۱۰ ویژگی مخفی لاراول که تا به امروز نمی دانستید

لاراول یک فریم ورک با ویژگی های بسیار زیاد می باشد با این وجود، تمام این ویژگی ها در منابع معتبر هنوز منتشر نشده است. در این مطلب چند ویژگی را به شما معرفی می کنم که شاید تا به حال ندیده بودید.




  • Get original attributes

بعد از ثبت یک رکورد در دیتابیس یا فراخوانی آن شما می توایند خصوصیات رکورد مورد نظر را با روش های زیر مورد استفاده قرار دهید

$user = App\User::first();
$user->name;                   //John
$user->name = &quotPeter&quot         //Peter
$user->getOriginal('name');    //John
$user->getOriginal();          //Original $user record




  • Check if Model changed

چک کردن با استفاده از مدل که آیا پس از واکشی از دیتابیس تغییراتی در فیلدهای رکورد مورد نظر ایجاد شده یا نه. به این مثال توجه کنید

$user = App\User::first();
$user->isDirty();          //false
$user->name = &quotPeter&quot
$user->isDirty();          //true

همچنین می توانیم چک کنیم که آیا دقیقا در فیلد مورد نظر ما تغییری بعد از واکشی اتفاق افتاده است.

$user->isDirty('name');    //true
$user->isDirty('age');       //false




  • Get changed attributes

فراخوانی فیلدهایی از رکورد مورد نظر که دچار تغییرات شده اند.

$user->getChanges()

[
     "name" => "Peter",
  ]

نکته : مشاهده این تغییرات در این مثال وابسته به ذخیره مدل یا استفاده همگام سازی تغییرات برگشت داده می شود

syncChanges()




  • Custom deleted_at column

به صورت پیش فرض لاراول با استفاده از ستون deleted_at حذف های نرم را کنترل می کند اما شما می توانید با مشخص کردن ویژگی DELETED_AT در مدل مورد نظر خود، این مورد را تغییر دهید.

class User extends Model
{
     use SoftDeletes;
     const DELETED_AT = 'is_deleted';
}

یا با تعریف یک دسترسی به خصوصیت این مورد را تغییر دهید

class User extends Model
{
      use SoftDeletes;

      public function getDeletedAtColumn()
      {
             return 'is_deleted';
      }
}




  • Save models and relationships

با استفاده از متد push می توانید یک مدل را به همراه روابط آن را ذخیره کنید

class User extends Model
{
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}
$user = User::first();
$user->name = &quotPeter&quot
$user->phone->number = '1234567890';
$user->push();   // This will update both user and phone record in DB




  • Reload fresh model

واکشی دوباره یک ردیف مثل اطلاعات کاربر با استفاده از fresh

$user = App\User::first();
$user->name;                         // John
// user record get updated by another thread. eg: 'name' changed to
// Peter.
$updatedUser = $user->fresh();
$updatedUser->name;         // Peter
$user->name;                      // John




  • Reload existing model

باز خوانی دوباره از پایگاه داده وقتی تغییراتی اعمال شده است با استفاده از refresh

$user = App\User::first();
$user->name;               // John
// user record get updated by another thread. eg: 'name' changed to
// Peter.
$user->refresh();
$user->name;              // Peter

نکته : refresh همچنین روابط بارگذاری شده مدل موجود را بروزرسانی می کند




  • Check if models are the same

چک کردن اینکه آیا دو ردیف دارای شناسه یکسان نسبت به هم دارند و هر دو آیا از یک جدول می باشند.

$user = App\User::find(1);
$sameUser = App\User::find(1);
$diffUser = App\User::find(2);
$user->is($sameUser);       // true
$user->is($diffUser);       // false




  • Clone a model

با استفاده از replicate می توانید از یک مدل کپی بردارید و آن را در دیتابیس ذخیره کنید

$user = App\User::find(1);
$newUser = $user->replicate();
$newUser->save();




  • Specify attributes in find() method

هنگام استفاده از find یا findOrFail شما می توانید خصوصیاتی را تعیین کنید تا به عنوان آرگومان دوم در نظر گرفته شود.

$user = App\User::find(1, ['name', 'age']);
$user = App\User::findOrFail(1, ['name', 'age']);

ما 10 ویژگی مخفی از لاراول را توضیح دادیم که شاید تا به الان به هیچ عنوان استفاده نکرده بودید اگر مطلب مورد نظر برای شما مفید بوده است حتما برای دیگران نیز به اشتراک بگذارید.