douliu8327 2016-01-26 19:12
浏览 49
已采纳

PHP MVC:模型之间的关系(人:联系人,星座运势,...)

I'm learning PHP, MVC and "Simple MVC Framework for PHP" now.

I have this model called 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
        }
    }
}

Contact:

<?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, ...
}

Every person has other models like Contact (1:1), Living(1:n), Horoscope (1:1), SocialMedia (1:1).

How do I design the relationship between them? Should I register these models in Person self (constructor)?

  • 写回答

1条回答 默认 最新

  • douyu1990 2016-01-26 22:35
    关注

    This is a pretty open ended question since there are many ways of doing this. The way I would approach this is to have getters that are responsible for initializing models if and when they are needed.

    For example, your class Person could have methods contact(), living(), and so on. These methods would look something like this:

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

    Then accessing contact methods from $person Person object should be as simple as:

     $person->contact()->getSomeContactProperty();
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改