حقه هایی برای استفاده از Eloquent در لاراول - سری اول

نویسنده:  حسین شفیعی
تاریخ انتشار:  01 تیر 1398
تاریخ آپدیت:  15 مرداد 1398
دسته بندی ها:  لاراول   PHP 

1. Increments and Decrements (افزایش و کاهش  مقدار یک فیلد در دیتا بیس)

بجای نوشتن این کد ها: 

$article = Article::find($article_id);
$article->view_count++;
$article->save();

شما میتوانید برای Increment و decrement  کردن یک فیلد از دیتا بیس  اینکار را بکنید:

$article = Article::find($article_id);
$article->increment('view_count');

یا اینکه اینگونه عمل کنید:

Article::find($article_id)->increment('view_count');
Article::find($article_id)->increment('view_count', 10); // +10
Product::find($produce_id)->decrement('stock'); // -1

2-یک سطر را پیدا کن اگر وجود نداشت خطای 404 را نمایش بده یا آن را ایجاد کن:

یک سطر را پیدا کن اگر وجود نداشت خطای 404 را نمایش بده؛ برای انجام اینکار شما کد های خود را چگونه می نویسید

$user = User::find($id);
if (!$user) { abort (404); }

بجای انجام این کار به صورت بالا میتوانید آن را اینگونه انجام دهید:

$user = User::findOrFail($id);

یا اینکه اگر بخواهید یک سطر را پیدا کنید و در صورت پیدا نشدن آن را ایجاد کنید چگونه کد می نویسید؟

$user = User::where('email', $email)->first();
if (!$user) {
  User::create([
    'email' => $email
  ]);
}

بجای آن اینگونه بنویسید:

$user = User::firstOrCreate(['email' => $email]);

3-متد boot در مدل

درون متد boot میتوانید رفتار پیشفرض متد های موجود در یک مدل را تغییر دهید مثلا اگر بخواهید رفتار متد updating را تغییر دهید میتوانید اینگونه آن را Override کنید

class User extends Model
{
    public static function boot()
    {
        parent::boot();
        static::updating(function($model)
        {
            // do some logging
            // override some property like $model->something = transform($something);
        });
    }
}

یکی از کارهایی که احتمالا در هنگام ایجاد شدن یک سطر می بایست انجام شود ایجاد uuid برای آن سطر از ، برای انجام اینکار میتوانیم اینگونه عمل کنیم:

public static function boot()
{
  parent::boot();
  self::creating(function ($model) {
    $model->uuid = (string)Uuid::generate();
  });
}

4- روابط شرطی یا مرتب سازی شده در لاراول:

برای ایجاد رابطه بین دو مدل معمولا اینگونه عمل می کنیم:

public function users() {
    return $this->hasMany('App\User');    
}

حالا اگر بخواهیم تنها کاربرانی را برگردانیم که تایید شده باشند یا به عبارتی رابطه ی شرطی ایجاد کنیم و یا آن ها را بر اساس مرتب سازی با ایمیل برگردانیم اینگونه عمل میکنیم:

public function approvedUsers() {
    return $this->hasMany('App\User')->where('approved', 1)->orderBy('email');
}

5. Model properties: timestamps, appends و ...

تعدادی پارامتر برای مدل ها وجود دارد که تقریبا همه آن ها را میدانند مثل اینها:

class User extends Model {
    protected $table = 'users';
    protected $fillable = ['email', 'password']; // which fields can be filled with User::create()
    protected $dates = ['created_at', 'deleted_at']; // which fields will be Carbon-ized
    protected $appends = ['field1', 'field2']; // additional values returned in JSON
}

اما این پارامتر ها همین ها نیستند و تعدادشان خیلی بیشتر از این هااست، مثلا اینها:

protected $primaryKey = 'uuid'; // it doesn't have to be "id"
public $incrementing = false; // and it doesn't even have to be auto-incrementing!
protected $perPage = 25; // Yes, you can override pagination count PER MODEL (default 15)
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at'; // Yes, even those names can be overridden
public $timestamps = false; // or even not used at all

اگه فکر کردین که تموم شدن سخت در اشتباهین برای دیدن همه ی اونها وارد این لینک بشید.

6- پیدا کردن چند سطر هم زمان

همه میدونیم برای پیدا کردن یک سطر باید اینکارو بکنیم:

$user = User::find(1);

خیلی ها نمیدونن که اگه بخواهیم چند سطر رو پیدا کنیم خیلی راحت میشه اینکارو کرد:

$users = User::find([1,2,3]);

7-WhereX

بجای اینکه اسم اون فیلدی که میخواین روش شرط بزارین رو اینطوری بنویسین:

$users = User::where('approved', 1)->get();

چه کاریه آدم خسته میشه بجاش اینطوری بنویسین تو وقتتون صرفه جویی میشه

$users = User::whereApproved(1)->get();

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

User::whereDate('created_at', date('Y-m-d'));
User::whereDay('created_at', date('d'));
User::whereMonth('created_at', date('m'));
User::whereYear('created_at', date('Y'));

ادامه دارد ... 

قسمت دوم

 

#Eloquent  
     1738

دوره های آموزشی

با کیفیت ترین دور های آموزشی برنامه نویسی PHP و JavaScript

مقاله های بروز

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

نقشه راه

نقشه ای برای تبدیل شدن به یک برنامه نویس حرفه ای

رفع اشکالات برنامه نویسی

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

مقالات پیشنهادی

ابتدایی
دسته بندی ها : جاوا اسکریپت

بررسی ابتدایی 10 فریمورک برتر جاوا اسکریپت در سال 2019

در این مقاله قصد داریم تا بهترین فریمورک های جاوا اسکریپت مانند ریکت و ویو جی اس و ... که در سال 20...

متوسط
دسته بندی ها : لاراول

برخی از ویژگی های مهمی که لاراول را محبوب کرده است

در این مقاله به بررسی موارد مهمی میپردازیم که در محبوبیت فریمورک لاراول نقش زیادی داشته اند

متوسط
دسته بندی ها : لاراول

دلایل پیدایش فریمورک محبوب لاراول و بررسی نسخه های مختلف آن

در این مقاله به بررسی نسخه های مختلف لاراول و ویژگی هایی که در هر نسخه به این فریمورک اضافه شده است...

متوسط
دسته بندی ها : پکیج های لاراول PHP

یه پکیج کامل برای کار با تاریخ شمسی در php و لاراول (morilog/jalali)

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

ابتدایی

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

شما می‌توانید برنامه‌نویسی را بیاموزد و وارد این حرفه شوید، اما پیمودن این مسیر فوت و فن هایی دارد...

ابتدایی
دسته بندی ها : CSS

بهترین منابع برای آموزش عمیق CSS

بهترین منابع برای یادگیری css چه هستند؟ در این مقاله به بررسی بهترین وبسایت های آموزش CSS میپردازی...

دیدگاه های کاربران

ثبت دیدگاه جدید

شما میتوانید دیدگاه خود را در کادر زیر بنویسید و سپس روی دکمه ارسال دیدگاه کلیک کنید. دیدگاه شما پس از تایید نمایش داده خواهد شد.

برای استایل دادن به نوشته های خود میتوانید از Mark-down استفاده کنید.

مطالعه قوانین mark-down

پیشنمایش دیدگاه شما

هیچ دیدگاهی برای این موضوع ثبت نشده است.

اولین کسی باشید که برای این موضوع دیدگاهی مینویسد.