وبلاگ

متدهای firstOrNew و firstOrCreate و firstOr و updateOrCreate در لاراول


رقیه اباذری رقیه اباذری

اگر با لاراول کار کرده باشید، به طور حتم با متدهای استاندارد برای ساخت مدل‌های 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::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

به طور کلی، این متدها می‌توانند کمک کنند تا در شرایط خاص کد خود را بهبود بخشیده و گزینه‌های بیشتری برای کار با مدل‌ها در اختیار داشته باشید.



رقیه اباذری
رقیه اباذری

تو دانشگاه IT خوندم و اکثر منابع کتاب‌های ترجمه شده بودند و صدالبته مبهم :( مثلا element رو "عنصر" ترجمه می‌کردن و من همیشه می‌رفتم تو شیمی و جدول مندلیف. تو باورژن سعی کردم تا حد ممکن مطالب رو با زبان ساده و قابل درک بنویسم. باشد که کسانی که تازه پا به عرصه برنامه‌نویسی گذاشتن، راغب‌تر بشن و با نظرات و فیدبک‌های شما راه هموارتر بشه:)

مطالب مرتبط

آموزش متد search کالکشن لاراول به همراه مثال

از متد سرچ برای جستجو کردن یک مقدار در یک کالکشن استفاده می‌شود. اگر مقدار در مجموعه وجود داشته باشد، کلید مقدار را ریترن می‌کند. اگر مقدار با هیچ آیتمی مطابقت نداشته باشد، false برگردانده می‌شود.

ولیدیشن در لاراول 7 به همراه مثال

لاراول روش‌های مختلفی برای اعتبارسنجی داده‌های اپلیکیشن فراهم کرده است.

کش کردن کوئری‌های الوکوئنت در لاراول

کش کردن تاثیر زیادی در سرعت سایت دارد. لاراول به صورت از پیش نصب شده درایورهای کش دارد که با استفاده از آنها می‌توانید سرعت سایت را بهبود ببخشید.

آموزش ساخت pdf از ویو در لاراول به همراه مثال

ساخت pdf از ویو در لاراول با استفاده از کتابخانه Dompdf ، Dompdf یک مبدل HTML به PDF است. در این نوشته آموزش ساخت پی دی اف از ویو در لاراول را با مثال بخوانید.

دیدگاه‌ها