【问题标题】:PHP MVC: Relationship between models (Person: Contact, Horoscope, ...)PHP MVC:模型之间的关系(人:联系人,星座,...)
【发布时间】:2016-01-26 19:12:58
【问题描述】:

我现在正在学习 PHP、MVC 和“PHP 的简单 MVC 框架”。

我有一个名为 Person 的模型:

<?php

namespace Models;

use Core\Model;
use Helpers\Database;
use Core\Error;

class Person extends Model {
    protected $db;
    protected $tname = 'person';

    function __construct() {
        parent::__construct ();
        $this->db = Database::get ();
    }

    public function getPersons() {
        return $this->db->select ( "SELECT firstname, lastname FROM " . PREFIX . $this->tname );
    }

    public function insertPerson($data) {
        if (is_array ( $data )) {
            $this->db->insert ( PREFIX . $this->tname, $data );
            return $this->db->lastInsertId ( 'personID' );
        } else {
            // Error::display ( '$data is not an array.' ); // TODO: not in model
        }
    }
}

联系方式:

<?php

namespace Models;

use Core\Model;
use Helpers\Database;

class Contact extends Model {
    protected $db;

    function __construct() {
        parent::__construct ();
        $this->db = Database::get ();
    }

    // handle telephone, mobile, fax, emails, ...
}

每个人都有其他模型,例如 Contact (1:1)、Living (1:n)、Horoscope (1:1)、SocialMedia (1:1)。

如何设计它们之间的关系?我应该在 Person self (constructor) 中注册这些模型吗?

【问题讨论】:

    标签: php model-view-controller frameworks


    【解决方案1】:

    这是一个非常开放的问题,因为有很多方法可以做到这一点。我的方法是让 getter 负责在需要时初始化模型。

    例如,您的 Person 类可能有方法 contact()、living() 等。这些方法看起来像这样:

    public function contact()
    {
      if($this->_contact_model == null) {
        $this->_contact_model == new Contact();
        // ... 
      }
    
      return $this->_contact_model;
    }
    

    那么从 $person Person 对象访问联系人方法应该很简单:

     $person->contact()->getSomeContactProperty();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      相关资源
      最近更新 更多