مدل‌ها در فریمورک فلر

مدل‌ها (Models) مسئول ارتباط با دیتابیس در فریمورک فلر هستند. مدل‌ها داده‌ها را از دیتابیس خوانده و برای استفاده در برنامه آماده می‌کنند. در این بخش، ما نحوه تعریف، فراخوانی و استفاده از مدل‌ها را در فریمورک فلر توضیح خواهیم داد.

تعریف مدل

مدل‌ها معمولاً یک کلاس هستند که با یک جدول در دیتابیس مرتبط هستند. در اینجا، نمونه‌ای از یک مدل ساده برای جدول users آورده شده است:


namespace Models;

use MysqliDb;

class UsersModel {
    protected static $tableName = 'users';

    public $id;
    public $name;
    public $email;
    public $password;
    public $token;
    public $photo;
    public $created_at;
    public $updated_at;

    protected $db;

    public function __construct()
    {
        global $db;
        $this->db = $db;
    }
}
        

در این مثال، مدل UsersModel با جدول users در دیتابیس مرتبط است و ویژگی‌ها و متدهایی برای تعامل با این جدول دارد.

یافتن رکوردها

برای جستجو در دیتابیس و دریافت رکوردها، می‌توانیم از متدهایی مانند findByEmail() و find() استفاده کنیم. در اینجا نحوه استفاده از این متدها را مشاهده می‌کنید:


public static function findByEmail($email)
{
    global $db;
    $db->where('email', $email);
    $result = $db->getOne(self::$tableName);
    return $result ? self::instantiate($result) : null;
}
        

متد findByEmail() یک رکورد با استفاده از ایمیل جستجو می‌کند و آن را به شیء مدل تبدیل می‌کند.

ذخیره و به‌روزرسانی رکوردها

متد save() برای ذخیره و به‌روزرسانی رکوردها در دیتابیس استفاده می‌شود. اگر شیء مدل دارای شناسه باشد، رکورد موجود به‌روزرسانی می‌شود؛ در غیر این صورت، یک رکورد جدید درج می‌شود. در اینجا نمونه‌ای از نحوه استفاده از این متد آورده شده است:


public function save()
{
    $data = [
        'name'       => $this->name,
        'email'      => $this->email,
        'password'   => $this->password,
        'token'      => $this->token,
        'photo'      => $this->photo,
        'created_at' => $this->created_at,
        'updated_at' => $this->updated_at,
    ];

    if ($this->id) {
        // Update
        $this->db->where('id', $this->id);
        return $this->db->update(self::$tableName, $data);
    } else {
        // Insert
        $id = $this->db->insert(self::$tableName, $data);
        if ($id) {
            $this->id = $id;
            return true;
        }
        return false;
    }
}
        

اگر شناسه موجود باشد، رکورد به‌روزرسانی می‌شود، در غیر این صورت رکورد جدید درج می‌شود.

ساختن شیء مدل

برای ساخت شیء مدل از داده‌های یک رکورد، می‌توانیم از متد instantiate() استفاده کنیم. این متد داده‌ها را استخراج کرده و شیء مدل را می‌سازد:


protected static function instantiate($record)
{
    $object = new self;
    foreach ($record as $attribute => $value) {
        if (property_exists($object, $attribute)) {
            $object->$attribute = $value;
        }
    }
    return $object;
}
        

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

عملیات CRUD

مدل‌ها در فریمورک فلر از عملیات CRUD (ایجاد، خواندن، به‌روزرسانی، حذف) پشتیبانی می‌کنند. در اینجا، نحوه انجام این عملیات‌ها را مشاهده می‌کنید:

ایجاد (Create)

برای ایجاد یک رکورد جدید، از متد save() استفاده می‌کنیم:


$user = new UsersModel();
$user->name = 'Ali';
$user->email = 'ali@example.com';
$user->password = password_hash('password123', PASSWORD_DEFAULT);
$user->created_at = date('Y-m-d H:i:s');
$user->save();
        

خواندن (Read)

برای خواندن رکوردها، می‌توانیم از متدهای find() و findByEmail() استفاده کنیم:


$user = UsersModel::findByEmail('ali@example.com');
echo $user->name;
        

به‌روزرسانی (Update)

برای به‌روزرسانی یک رکورد موجود، کافی است مقدار ویژگی‌ها را تغییر داده و متد save() را فراخوانی کنیم:


$user->name = 'Ali Reza';
$user->save();
        

حذف (Delete)

برای حذف یک رکورد، می‌توانیم از متد delete() استفاده کنیم (در صورت نیاز به افزودن آن به مدل):


public function delete()
{
    $this->db->where('id', $this->id);
    return $this->db->delete(self::$tableName);
}
        

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

  • همیشه از متدهای ایمن مانند password_hash() برای ذخیره‌سازی رمزعبور استفاده کنید.
  • منطق مرتبط با دیتابیس را در مدل‌ها نگه دارید و منطق برنامه را از کنترلرها جدا کنید.
  • از متدهای آماده مانند find() برای جستجو و save() برای ذخیره‌سازی استفاده کنید.
  • برای جلوگیری از مشکلات امنیتی، همیشه داده‌ها را اعتبارسنجی کنید قبل از ذخیره‌سازی در دیتابیس.
\/