Постоение SQL запроссов. Active Record. Реализация. Паттерны.

whirlwind

TDD infected, paranoid
$news = new News();
$comments = new Comments();
$comments->Filter('user_id', 3);
$join = $news->Join($comments);
print $join->ByStr();
Если

get_class($comments->news) === get_class(new News )

тогда join - это поиск referenced атрибута в Comments и постановка условия соединения по этому значению. И делать такое лучше внешним конструктором, т.к. то что получится в результате будет необъявленной сущьностью (т.е. и не News и не Comments). Это будет нечто новое, что без класса можно рассматривать исключительно как recordset. Все это конечно возможно при условии атомизации/унификации атрибутов. В моей интерпретации эт выглядело примерно так

PHP:
$news = new News(); 
$comments = new Comments(); 
$comments->Filter('user_id', 3); 
$q = new Query;
$q->from($news);
$q->from($comments);
print $q->asStr();
Классу Query известен базовый класс ORM объекта, через который можно получить фильтры, порядок сортировки, атрибуты, etc... Т.е. здесь идет привязка к классу модели, но для этого элементарный ActiveRecord не подходит.
 
Сверху