да, действительно интересно:) спасибо за ссылку
Большинство проектов в Интернете простые и низконагруженные. А для сложных проектов, мне кажется, лучше делать индивидуальный фреймворк (если миллионная посещаемость).
и точно так же популярных фреймворков несколько, а не один. Т.е. у каждого свой вкус, а значит и любой новый фреймворк найдет своих поклонников:)
SQL_CALC у меня включен опционально, можно не использовать, а в некоторых случаях он быстрее.
Также я нигде не встречал INSERT DELAYED, а это крайне полезно для логов и статистики. Многие используют две таблицы - одну в MEMORY, другую на диске, потом по Крону одна копируется в другую и т.д. При этом никто не использует простые решения.
Для отношений Has Many, Belongs To и других используются несколько SELECT, хотя в некоторых случаях INNER JOIN в разы быстрее.
Я прихожу к выводу, что уже забывают про понятие оптимизации и стремятся максимально все абстрагировать, чтобы создать идеальный MVC-фреймворк. Потом пытаются ускорить неоптимизированный движок кэшированием. А проще сразу создавать правильные запросы.
Устраивает, просто основные элементы популярных типов сайта (типа блоги), такие как пагинация и т.д. я делаю сразу в ядре, чтобы каждый раз не писать кучу кода. Вы, может, заметили, что SQL_CALC_FOUND_ROWS, например, используются очень редко. Вместо этого отправляется запрос COUNT(*), потом выборка. Также редко используются INNER JOIN при связях таблиц.
у меня ORM привязана к фреймворку - трейты и т.д. А mysqli уже не котируется?:)
<?php class UserBuilder { public function where($where) { $this->where .= $this->where ? " AND $where " : " $where "; return $this; } public function get() { return new User($this->where . ' LIMIT 1'); } private $where; } class User { public function __construct($sql) { $this->sql = $sql; } public static function where($where) { $builder = new UserBuilder(); $builder->where($where); return $builder; } public function show() { echo "SELECT * FROM user WHERE {$this->sql}"; } private $sql; } $user = User::where("active = 1")->where("dumb = 0")->where("admin = 0")->get(); $user->show();
спасибо!
я правда решил эту проблему с помощью трейтов и без функций-оберток:)
да, возвращает экземпляр User (return $this).
я как раз про то и говорю, что первый where вызывается через ::, а второй - через ->. Очень удобно, но это нужно реализовывать :)
Так сделано в некоторых фреймворках:
User::where(1)
вместо
User::get_instance()->where(1)
Для упрощения вызова методов.
Попробуйте проверять не по условию
value=="Отобразить"