اگر با لاراول کار کرده باشید، به طور حتم با متدهای استاندارد برای ساخت مدلهای Eloquent مثل make()
، create()
، update()
و save()
آشنایی دارید. لاراول متدهای دیگری هم دارد که آن طور که باید و شاید به آنها توجه نشده است. این متدها برای آپدیت و ساخت مدلها واقعا کارآمد هستند. در این مقاله از باورژن قصد داریم تعدادی از این متدها را با هم بررسی کنیم. با ما همراه باشید.
متد firstOrNew
متد firstOrNew
برای پیدا کردن یا ساختن است. خب سوال اینجاست که پیدا کردن یا ساختن چه چیزی؟!! این متد بررسی میکند که آیا رکوردی منطبق با شرطهای مورد نظر ما در دیتابیس وجود دارد یا خیر؟ اگر وجود داشت که هیچ، رکورد را باز میگرداند اما اگر وجود نداشت یک رکورد میسازد.
فرض کنید کد زیر را برای بررسی وجود کاربری با ایمیل مشخص داشته باشید.
$user = User::where('email', request('email'))->first();
if ($user === null) {
$user = new User(['email' => request('email')]);
}
$user->name = request('name');
$user->save()
سپس به این قطعه کد تغییرش دهید.
$user = User::firstOrNew(['email' => request('email')]);
$user->name = request('name');
$user->save()
میتوانید آرایهای از اتریبیوتهای اضافی را به عنوان پارامتر دوم قرار دهید تا در صورت عدم یافتن رکورد منطبق، در رکورد جدید اضافه شود:
$user = User::firstOrNew(
['email' => request('email')],
['name' => request('name')]
);
$user->save();
متد firstOrCreate
متد firstOrCreate
خیلی شبیه به متد firstOrNew
است. سعی می کند رکوردی را مطابق با اتریبیوت مورد نظر شما پیدا کند. اگر رکورد را پیدا نکرد، به صورت اتوماتیک یک مدل جدید ایجاد و ذخیره میکند.
توجه
پس تفاوت متد firstOrCreate
با متد firstOrNew
در ذخیره کردن مدل است. در واقع در firstOrNew
مانند ایجاد یک instance از مدل عمل میکند که نیاز به ذخیره شدن دارد ولی firstOrCreate
نیازی به ذخیره شدن ندارد.
$user = User::firstOrCreate(
['email' => request('email')],
['name' => request('name')]
);
// No call to $user->save() needed
متد firstOr
متد firstOr
اولین رکورد یک کوئری را باز میگرداند. اگر رکورد مورد نظر پیدا نشد، کالبکی که به آن پاس داده شده را فراخوانی میکند. این متد زمانی که مجبورید برای ایجاد یک کاربر، مراحل اضافی انجام دهید واقعا مفید است. یا حتی وقتی میخواهید کاری غیر از ایجاد یک کاربر جدید انجام دهید.
اصطلاح فنی
کالبَک یا callback به فانکشنی میگویند که نامی ندارد. کالبک اغلب یا به صورت یک پارامتر تعریف میشود.
$user = User::where('email', request('email'))->firstOr(function () {
$account = Account::create([ //... ]);
return User::create([
'account_id' => $account->id,
'email' => request('email'),
]);
});
متد updateOrCreate
و اما متد آخر. این متد شبیه به متد firstOrCreate
است اما با یک تفاوت کوچک. اگر رکورد مورد نظر را پیدا کند، بلافاصله آن را آپدیت میکند. اگر وجود نداشت آن را با توجه به شروطی که به عنوان آرگومان اول و اتریبیوتهایی که به عنوان پارامتر دوم به این متد پاس دادیم میسازد.
توجه
تفاوت متد firstOrCreate
با متد updateOrCreate
در آپدیت کردن است. در واقع متد firstOrCreate
در صورت یافتن رکورد، آن را ریترن میکند ولی متد updateOrCreate
در صورت یافتن رکورد آن را آپدیت میکند. در صورت عدم یافتن نیز هر دو رکورد جدیدی ایجاد میکنند.
کد زیر را در نظر بگیرید:
$user = User::where('email', request('email'))->first();
if ($user !== null) {
$user->update(['name' => request('name')]);
} else {
$user = User::create([
'email' => request('email'),
'name' => request('name'),
]);
}
// Do other things with the Us
با استفاده از متد updateOrCreate
میتوانید آن را ریفکتور کنید:
$user = User::updateOrCreate(
['email' => request('email')],
['name' => request('name')]
);
// Do other things with the User
به طور کلی، این متدها میتوانند کمک کنند تا در شرایط خاص کد خود را بهبود بخشیده و گزینههای بیشتری برای کار با مدلها در اختیار داشته باشید.
رقیه اباذری
تو دانشگاه IT خوندم و اکثر منابع کتابهای ترجمه شده بودند و صدالبته مبهم :( مثلا element رو "عنصر" ترجمه میکردن و من همیشه میرفتم تو شیمی و جدول مندلیف. تو باورژن سعی کردم تا حد ممکن مطالب رو با زبان ساده و قابل درک بنویسم. باشد که کسانی که تازه پا به عرصه برنامهنویسی گذاشتن، راغبتر بشن و با نظرات و فیدبکهای شما راه هموارتر بشه:)
دیدگاهها
ثبت دیدگاه