Skip to content

Latest commit

 

History

History
58 lines (43 loc) · 2.54 KB

map.md

File metadata and controls

58 lines (43 loc) · 2.54 KB

##Мапы

###Основы

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

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

Мапы должны храниться в директории /app/maps/, директория может иметь вложенные папки.

Доступ к мапам осуществляется "точечным путем" dir.subdir.name, а имя класса такого блока должно иметь вид Dir_Subdir_Name_Map.

В директории /app/maps/ могут быть приватные папки имя которых начинается с "_" - нижние подчеркивание. Такие папки недоступны по точечному пути и могут хранить вспомогательные классы мапов.

###Доступ

Предположим, у нас имеется мап comments.php который расположен в директории /app/map/blog/. К такому мапу можно обратиться, используя путь blog.comments, и имя его класса должно иметь вид Blog_Comments_Map.

class Blog_Comments_Map
{		
	public function addComment($data)
	{		
		DB::query("INSERT INTO comments
		(topic_id,
		 user_id,
		 text,
		 add_date
		) VALUES 
		(:topic_id,
		 :user_id,
		 :text,
		 :add_date
		)", $data);
	}

	public function delComment($comment_id)
	{		
		DB::query("DELETE FROM comments WHERE comment_id=:comment_id", array('comment_id'=>$comment_id));
	}

	public function getComments($topic_id, $start, $step)
	{		
		$DBData = compact('topic_id', 'start', 'step');

		return DB::query("SELECT * FROM comments WHERE topic_id=:topic_id ORDER BY add_date DESC LIMIT $start, $step", $DBData)->fetch_array();
	}
}

Теперь мы можем обратиться к методам этого мапа.

Map::get('blog.comments')->getComments();