Не конструктивно? Это одна из самых фундаментальных концепций для понимания того, как работают внутренние компоненты Doctrine.
csvan 07
6
Я считаю, что этот вопрос нужно защищать, а не закрывать.
Саймон
2
@Simon Согласен. Вопрос и принятый ответ популярны, почему бы тогда не переместить его в защищенное состояние?
Денис Кулагин
Ответы:
92
Гидратация - это метод, используемый для возврата результатов запроса. Например:
HYDRATE_ARRAY - Это вернет вам массив записей, представленных другим массивом:
$q = Doctrine_Query::create()
->from('Post p')
->setHydrationMode(Doctrine::HYDRATE_ARRAY);
$resultSet = $q->execute(); // $resultSet is an arrayforeach ($resultSet as $post) {
// $post is an arrayecho $post['title'];
}
$q = Doctrine_Query::create()
->from('Post p')
->setHydrationMode(Doctrine::HYDRATE_RECORD); // Unnecessary, HYDATE_RECORD is default method
$resultSet = $q->execute(); // $resultSet is an Doctrine_Collection objectforeach ($resultSet as $post) {
// $post is an Post objectecho $post->getTitle();
echo $post['title']; // Each Doctrine's Model object implements ArrayAccess interface so this is possibleecho $post->myCustomMethod();
}
HYDRATE_SINGULAR_SCALAR - Вернет значение первого столбца результата запроса:
$q = Doctrine_Query::create()
->select('p.created_at')
->from('Post p')
->where('p.id = ?', 321)
->setHydrationMode(Doctrine::HYDRATE_SINGULAR_SCALAR);
$createdAt = $q->execute(); // $createdAt has value of first column from first record from result set (eg.: 2008-04-06 21:22:35)
Есть еще несколько методов, о каждом из которых вы можете прочитать в документации.
хорошо .. так что обычно, когда я использую sql, он возвращает объект mysql, и мне нужно использовать mysqli_fetch_assoc, затем сортировать их самостоятельно и так далее ... но теперь все отсортировано для меня. вот что такое гидратация, давая мне отсортированные объекты / массивы?
never_had_a_name
4
Нет, дело не в результатах сортировки ( orderBy()справитесь с этим). Речь идет о том, каким будет результат вашего запроса , будь то одно скалярное значение ( HYDRATE_SINGULAR_SCALAR), массив или массивы, где вложенные массивы представляют каждую запись базы данных ( HYDRATE_ARRAY) или коллекцию объектов ( HYDRATE_RECORD). Сделать var_dump для результата запроса для каждого режима гидратации - это лучший способ увидеть, «как это работает?»
Crozin
4
просто небольшой совет. В 1.2 HYDRATE_SINGULAR_SCALARвозвращает неопределенную постоянную ошибку. HYDRATE_SINGLE_SCALARправильно.
Дармен Аманбаев
1
Как примечание Doctrine::HYDRATE_RECORDтеперь известно какDoctrine::HYDRATE_OBJECT
Стив Таубер
1
Ссылка на вышеупомянутую документацию сделает этот ответ более полезным.
Ответы:
Гидратация - это метод, используемый для возврата результатов запроса. Например:
HYDRATE_ARRAY
- Это вернет вам массив записей, представленных другим массивом:$q = Doctrine_Query::create() ->from('Post p') ->setHydrationMode(Doctrine::HYDRATE_ARRAY); $resultSet = $q->execute(); // $resultSet is an array foreach ($resultSet as $post) { // $post is an array echo $post['title']; }
HYDRATE_RECORD
- Это вернет вам коллекцию ( Doctrine_Collection ) объектов:$q = Doctrine_Query::create() ->from('Post p') ->setHydrationMode(Doctrine::HYDRATE_RECORD); // Unnecessary, HYDATE_RECORD is default method $resultSet = $q->execute(); // $resultSet is an Doctrine_Collection object foreach ($resultSet as $post) { // $post is an Post object echo $post->getTitle(); echo $post['title']; // Each Doctrine's Model object implements ArrayAccess interface so this is possible echo $post->myCustomMethod(); }
HYDRATE_SINGULAR_SCALAR
- Вернет значение первого столбца результата запроса:$q = Doctrine_Query::create() ->select('p.created_at') ->from('Post p') ->where('p.id = ?', 321) ->setHydrationMode(Doctrine::HYDRATE_SINGULAR_SCALAR); $createdAt = $q->execute(); // $createdAt has value of first column from first record from result set (eg.: 2008-04-06 21:22:35)
Есть еще несколько методов, о каждом из которых вы можете прочитать в документации.
источник
orderBy()
справитесь с этим). Речь идет о том, каким будет результат вашего запроса , будь то одно скалярное значение (HYDRATE_SINGULAR_SCALAR
), массив или массивы, где вложенные массивы представляют каждую запись базы данных (HYDRATE_ARRAY
) или коллекцию объектов (HYDRATE_RECORD
). Сделать var_dump для результата запроса для каждого режима гидратации - это лучший способ увидеть, «как это работает?»HYDRATE_SINGULAR_SCALAR
возвращает неопределенную постоянную ошибку.HYDRATE_SINGLE_SCALAR
правильно.Doctrine::HYDRATE_RECORD
теперь известно какDoctrine::HYDRATE_OBJECT
$q->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);
Он вернет просто простой массив вместо объекта коллекции доктрины.
источник