Так что в настоящее время у меня есть класс DailyRecord для таблицы в моей базе данных daily_record. Предположим, что у него есть поля с именем id, field1 и field2. В моем конструкторе я передаю идентификатор записи и запрашиваю базу данных для извлечения всех трех полей. Я хочу, чтобы мой класс имел данные, которые заполнены из этого запроса. Тем не менее, я буду делать это с большим количеством таблиц и классов, и я стараюсь, чтобы избежать чего-то вроде этого:PHP Аннотация класс для заполнения класса из таблицы базы данных
public __construct($id){
//$record = $db->query('some query here');
$this->id = $record['id'];
$this->field1 = $record['field1'];
$this->field2 = $record['field2'];
}
Потому что, если у меня есть много полей в таблице это будет получить довольно утомительно. Кроме того, мне может не понадобиться заполнять все поля каждый раз, когда я создаю класс (если я использую несколько конструкторов). Мне показалось, что я помню, как видел CMS электронной коммерции (Prestashop или Magento), который создал для этого абстрактный класс. Так или иначе, расширив этот абстрактный класс, можно было автоматически заполнить эти поля.
Есть ли у кого-нибудь предложения по поводу чего-то подобного? Заранее спасибо!
Как правило, вы не должны запрашивать БД внутри CTOR. Что делать, если есть исключение? Что делать, если база данных закрыта? и т. д. Что делать, если ваш источник данных изменяется? Используйте интерфейс для определения того, как класс взаимодействует с каким-либо неоднозначным источником данных, а затем зависимость вставляет экземпляр этого интерфейса в метод 'load'. – crush
Хорошая точка. Поэтому, даже если я переведу этот запрос за пределы ctor, я бы хотел найти способ автоматического заполнения полей. –
Вы можете начать с использования 'DESCRIBE tableName', чтобы получить всю необходимую информацию в полях и типах полей для MySQL и' sp_columns' для MSSQL и т. Д. – dbf