Добавление методов поиска коллекции в модель - PullRequest
2 голосов
/ 06 февраля 2011

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

Моя текущая модель выглядит следующим образом:

<?php
class User {

    $id;
    $name;
    $address;

    public function __construct() {
        // do some constructor stuff    
    }

    public function save() {
        // insert into....  
    }

    public function delete() {
        // delete from user where ....
    }

    public function find($id) {
        // select * from user where ...     
    }
}
?>

Любая помощь будет высоко ценится, спасибо

Ответы [ 3 ]

4 голосов
/ 06 февраля 2011

Что ж, после того, как у вас есть методы для поиска, создания и удаления пользователей, вам не о чем беспокоиться. На мой взгляд, есть два подхода

1) Вы можете использовать ваш метод find() особым образом, чтобы получить всех пользователей (немного хака)
2) Вы можете создать открытый статический метод getAll() для выполнения работы (я думаю, что он должен быть статическим, потому что getAll() не связан ни с одним экземпляром объекта User)

1 голос
/ 06 февраля 2011

Это зависит от того, что является «моделью» в вашем приложении.
Если это просто представление таблицы БД, вы можете добавить метод findAll () или getAll () в вашу модель.
Но если это класс сущности, он не долженне знаю об источнике данных.Вам следует добавить в ваше приложение service и data mappers слоев.
Если ваше приложение довольно маленькое и дополнительные слои его перегружают - просто используйте active record шаблон.

1 голос
/ 06 февраля 2011

Метод getAll() внутри модели на самом деле является стандартной практикой.В этом нет ничего плохого.

Например, в Zend Framework базовый класс Zend_Db_Table_Abstract имеет встроенный метод fetchAll().Внутренний класс ActiveRecord Codeigniter реализует get(), который ведет себя аналогично.И т. Д.

Модель является более широким понятием, чем CRUD , и количество методов не ограничено, если они обрабатывают данные.

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