2016-01-26 3 views
0

Сейчас я изучаю PHP, MVC и «Простую MVC-платформу для PHP».PHP MVC: Связь между моделями (Person: Contact, Horoscope, ...)

У меня есть эта модель под названием 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, ... 
} 

Каждый человек имеет другие модели, как контакт (1: 1), Жизнь (1: N) Предсказание (1 : 1), SocialMedia (1: 1).

Как мне установить связь между ними? Должен ли я регистрировать эти модели в Self self (constructor)?

ответ

0

Это довольно открытый вопрос, поскольку есть много способов сделать это. То, как я подхожу к этому, - это иметь геттеры, которые отвечают за инициализацию моделей, если и когда они понадобятся.

Например, у вашего класса Person могут быть методы contact(), living() и т. Д. Эти методы будут выглядеть примерно так:

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

    return $this->_contact_model; 
} 

Затем обращающиеся контактные методы от $ лица объекта Person должен быть простым, как:

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

Ok. Звучит хорошо. Большое спасибо! – user3646958

Смежные вопросы