И если я опечатаюсь в имени поля — я получу ошибку именно в той строке, где я обратился неправильно, ведь сюрприз — моя модель знает о структуре таблицы! А ты будешь ловить все ошибки всегда в одном месте — там, где ты запрос выполнить пытаешься.
$history = ORM::factory('history', $id);
$history->user_id = 146;
$history->save();
$history = ORM::factory('history', $id);
$history->values($_POST, array('user_id', 'point_id', 'source'));
$history->save();
$history = ORM::factory('history', $id);
if ($history->loaded())
{
$this->set('history', $history); // Вуаля! У нас в шаблоне есть все данные из записи! Мы можем их вывести так, как только захотим!
} else
{
throw new Http_Exception_404();
}
у меня не падает.упадет с ошибкой, ведь date по которому ты сорируешь — зарезервированное слово.
вот это сообщение состоит из говнорекламы чуть более, чем полностью.А теперь пишем обновление данных в табличке...
Может, твое приложение просто плохо спроектированно, а? ) Зачем его писать в две и более таблиц?к примеру, у меня юзер пишется в две или более таблиц.
я незнал все строки интересуют или всего одна.. сорьno pseudocode, please.
$res = $this->getAdapter()->fetch[Row/All/..]($sql);
$res = $this->getAdapter()->fetchRow($sql);
$res = $this->getAdapter()->fetchAll($sql);
Фанат, мне кажется ты забыл, что это не форум студентов твоего класса у которых 0 опыта, много теории в голове и Великий Учитель. Многие, кому ты тут говоришь "не теоретизируй", каждый день делают практику и на практике прошли весь путь с граблями. Может у тебя и правда архитектура так ужасна, что любое красивое решение сразу обозначается "песочница,в реальности так не бывает". Бывает...Секрет заключается в том, что эта работа является нормальной для всех. Вообще для всех. В реальной жизни.
В воображаемом идеальном мире, в котором живёт большинство программистов - да, это ненормально, и никогда не бывает.
В грязном грешном реальном коде - это везде. В качестве досадных исключений, TODOs, временных хаков и заплаток - но везде. И меньше этих "временных" исключений не становится
поэтому лично я - за реализм.
Как было написано в одном объявлении - "Не льсти себе - встань поближе" ;-)
для OR в zend зарезервированно orWhere(...) но порою используя эти методы код становиться плохочитабельным, бывает извращаюсь, но все можно написать именно таким способом, и юнионы туда приписать, и вложенные селекты с юнионамив частности, пример where со скобками. и сразу чтобы между условиями во WHERE было не AND, а OR.
Поздравляю, Фанат только что реализовал мой Frm\Db\Where, только придётся вручную доставлять скобки на случай OR и вложенные условия. Я так понимаю основная проблема этого подхода для тебя - это неумение пользоваться чужим высокоуровневым кодом.Отличный повод перейти от теоретических рассуждений к практике.
Вот тебе пример классического случая ручной склейки.
приведи, пожалуйста, примеры возможных ошибок и реализацию того же самого с помощью билдера.PHP:$where = $db->parse("month(`date`)=?i and year(`date`)=?i", $data['month'], $data['year']); if ( $point_id ) { $where .= $db->parse(" AND point_id=?i",$point_id); } if ( $source ) { $where .= $db->parse(" AND source=?s",$source); } $sql = "SELECT *, day(date) day, price*num as sum FROM history WHERE $where ORDER BY date DESC"; $res = $db->query($sql);
И посмотрим, сколько тут где ручного труда и возможных ошибок
no pseudocode, please.
Как видишь, это не подход из моего фреймворка, а общепринятая практика, которой разработчики пользуются уже не один год.Неужели ты даже с Zend Framework незнаком http://framework.zend.com/manual/1.12/en/zend.db.adapter.html#zend.db.adapter.write.insert или вот из древнего pear http://pear.php.net/manual/en/package.database.db.db-common.autoexecute.php
$crit = new CDbCriteria(array(
'select' => 'bi.brand_id, mi.model_id, t.KPP, t.hppower, t.fuel, t.body, MIN(t.price) as price, GROUP_CONCAT(t.id SEPARATOR ",") AS ids',
'join' => 'LEFT OUTER JOIN '.$db->quoteTableName("brand_import").' AS bi ON t.brand=bi.name AND bi.brand_id IS NOT NULL '
. 'LEFT OUTER JOIN '.$db->quoteTableName("model_import").' AS mi ON t.model=mi.name AND bi.brand_id=mi.brand_id',
'condition' => 'mi.id IS NOT NULL AND bi.id IS NOT NULL',
'group' => 'bi.brand_id, mi.model_id, t.KPP, t.hppower, t.fuel, t.body'
));
if (is_array($ids) && !empty($ids)) {
$crit->addInCondition("t.id", $ids);
}
И поэтому ты отписался в этой теме, последовательный ты наш.Ну да, SQL. Ну да, завернут в обертку. Ну да, особых плюсов не дает, но мне так нравится. Фанату не нравится. Меня это волнует? Нет.
И поэтому ты решил это прокомментировать, бдительный ты наш.И поэтому ты отписался в этой теме, последовательный ты наш.