اذهب إلى المحتوى

السؤال

نشر

قرأت كثيرًا عن بنية MVC المستعملة في كثير من إطارات العمل Frameworks مثل لارافيل Laravel وسيمفوني symfony وغيرها، وأريد الآن أن أقوم بمحاولة تطبيق هذه البنية.

كيف أقوم بعمل صنف Class يكون عبارة عن نموذج Model يتعامل مع البيانات الموجودة في قاعدة البيانات بإستخدام PHP فقط؟

Recommended Posts

  • 1
نشر

يمكن عمل لنموذج Model بسيط يعبر عن جدول معين في أي لغة برمجة، ولكن في البداية يجب أن تقوم بعمل صنف Class للإتصال بقاعدة البيانات والتعامل معها بالشكل التالي:

class Database {
   protected $conn;

   public function __construct($connection) {
       $this->conn = $connection;
   }

   public function ExecuteQuery($sql, $data) {
       // ...
   }
}

الصنف السابق يأخذ مدخل واحد وهو إتصال بقاعدة البيانات ويمكننا إستخدامه بالشكل التالي:

$conn = new PDO("mysql:host=localhost;dbname=myDB", "username", "password");

$db = new Database($conn);

الآن يمكن إستعمال التابع ExecuteQuery لتنفيذ جمل SQL مباشرة في قاعدة التي إتصلنا بها.

نحتاج الآن إلى عمل صنف مجرد abstract class يُعبر عن النموذج الواحد Model، بحيث يمكننا عمل أي عدد من النماذج Models كما نريد:

abstract class Model {
   protected $db;

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

   // ...
}

يمكننا الآن عمل نموذج Model يعبر عن المستخدم أو منشور ما .. إلخ:

class User extends Model {
   protected $table = "users";
   public function save() {
       // ...
       $sql = "INSERT INTO " . $this->table . " VALUE ...";
       return $this->db->ExecuteQuery($sql, $data);
   }
}

وتستطيع إستخدام هذا النموذج على النحو التالي:

$db = new Database($conn);
$user = new User($db);
$user->name('username');
$user->email('user@gmail.com');
$user->save();

الكود السابق ما هو إلا تجريد لجدول users في قاعدة البيانات، ولكن النموذج من المفترض أن المستخدم الواحد وليس جدول المستخدمين، لذلك يجب أن تقوم بإضافة بعض التوابع حسب حاجتك لإتمام عمليات أخرى مثل جلب بيانات مستخدم معين من قاعدة البيانات عبر id أو تعديل هذه البيانات لاحقًا .. إلخ.

ملاحظة: كل الكود السابق يمكن تطبيقه بعدة طرق مختلفة، ولكن ستحصل على نفس النتيجة في النهاية وهي وجود نموذج يعبر عن كائن معين (مستخدم، تعليق، منشور .. إلخ)، لذلك عليك أن تقوم بتعديل الكود السابق حسب رغبتك وإحتياجاتك.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...