Interim CTO / Back-End/API - Developer/ DevOps Engineer/ @full_stack_developer
۱۰ ویژگی مخفی لاراول که تا به امروز نمی دانستید
لاراول یک فریم ورک با ویژگی های بسیار زیاد می باشد با این وجود، تمام این ویژگی ها در منابع معتبر هنوز منتشر نشده است. در این مطلب چند ویژگی را به شما معرفی می کنم که شاید تا به حال ندیده بودید.
- Get original attributes
بعد از ثبت یک رکورد در دیتابیس یا فراخوانی آن شما می توایند خصوصیات رکورد مورد نظر را با روش های زیر مورد استفاده قرار دهید
$user = App\User::first();
$user->name; //John
$user->name = "Peter" //Peter
$user->getOriginal('name'); //John
$user->getOriginal(); //Original $user record
- Check if Model changed
چک کردن با استفاده از مدل که آیا پس از واکشی از دیتابیس تغییراتی در فیلدهای رکورد مورد نظر ایجاد شده یا نه. به این مثال توجه کنید
$user = App\User::first();
$user->isDirty(); //false
$user->name = "Peter"
$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 = "Peter"
$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 ویژگی مخفی از لاراول را توضیح دادیم که شاید تا به الان به هیچ عنوان استفاده نکرده بودید اگر مطلب مورد نظر برای شما مفید بوده است حتما برای دیگران نیز به اشتراک بگذارید.
مطلبی دیگر از این انتشارات
ایجاد Helper سفارشی در لاراول
مطلبی دیگر از این انتشارات
آموزش لاراول - مقدمه
مطلبی دیگر از این انتشارات
لاراول: چگونگی استفاده از Accessors و mutators