PHP - MVC и наследование таблиц - PullRequest
0 голосов
/ 30 марта 2012

Я хочу загрузить 2 объекта из моей БД. Первый объект является родительским и вторым наследником первого (в PHP и БД).

Я создал 2 класса: (это всего лишь пример, а не реальный код, поэтому не пытайтесь исправить это ;-))

class A{
    ...
    public static function get($id){
        $query = "SELECT id,field1,field2 FROM table_A WHERE id = $id";
        $result = request($query);
        return load_object_A_instance($result);
    }
    ...
}

class B extends A{    
    ...
    public static function get($id){
        $query = "SELECT id,field3,field4 FROM table_B WHERE id = $id";
        $result = request($query);
        return load_object_B_instance($result);
    }
    ...    
}

Я бы создал экземпляр объекта B со своими собственными свойствами и свойствами объекта A в «том же» действии Как я могу это сделать?

У меня есть некоторые идеи, но я не вижу, как их реализовать:

class B extends A{    
    ...
    public static function get($id){
        $query = "SELECT id, field3, field4 FROM table_B WHERE id = $id";
        $result = request($query);
        $B = load_object_B_instance($result);

        if($B != empty/null){
            $B = merge(A::get($B->id),$B); // <== that's the part I don't know how to implement
        }
        return $B;
    }
    ...    
}

Редактировать: Я нашел первое решение (оно не чистое, но ...)

echo $obj->name;  //show: carlos
echo $obj2->lastname; //show: montalvo here
$obj_merged = (object) array_merge((array) $obj, (array) $obj2);
$obj_merged->name; //show: carlos
$obj_merged->lastname; //show: montalvo here;

Решение найдено здесь: Как объединить два объекта?

Ответы [ 2 ]

0 голосов
/ 09 января 2014

Вы можете сделать это с наследованием одной таблицы: http://www.jacopobeschi.com/post/php-laravel-single-table-inheritance

0 голосов
/ 30 марта 2012

То, что вы используете классы, не делает его OOP. Если вы хотите объединить данные из двух источников данных, вы извлекаете информацию из них, а затем из 3-го компонента объединяете:

$foo = new A( $connection );
$bar = new B( $connection );

$data = $foo->get( 42 ) + $bar->get( 1 );

Также вы должны взглянуть на шаблон DataMapper и посмотреть видео на предмет правильного ООП:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...