Doctrine hydrat hóa là gì? [đóng cửa]


90

Tôi đã đọc về quá trình hydrat hóa trong tài liệu của học thuyết nhưng tôi vẫn không thể hiểu nó là gì.

Ai đó có thể vui lòng giải thích?


Doctrine2 tham khảo tài liệu hướng dẫn hydrat hóa giải thích: doctrine-project.org/docs/orm/2.0/en/reference/...
Dawid Ohia

29
Không mang tính xây dựng? Đây là một trong những khái niệm cơ bản nhất để hiểu cách hoạt động của nội bộ Học thuyết.
csvan

6
Tôi nghĩ câu hỏi này nên được bảo vệ hơn là đóng lại.
Simon

2
@Simon Đồng ý. Câu hỏi và câu trả lời được chấp nhận đều phổ biến, tại sao không chuyển nó sang trạng thái được bảo vệ ?
Denis Kulagin

Câu trả lời:


92

Hydrat hóa là một phương pháp được sử dụng để trả về kết quả truy vấn. Ví dụ:

  1. HYDRATE_ARRAY - Thao tác này sẽ trả về cho bạn một mảng bản ghi được đại diện bởi một mảng khác:

    $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'];
    }
  2. HYDRATE_RECORD- Điều này sẽ trả về cho bạn một bộ sưu tập ( Doctrine_Collection ) của các đối tượng:

    $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();
    }
  3. HYDRATE_SINGULAR_SCALAR - Sẽ trả về giá trị của cột đầu tiên trong kết quả của truy vấn:

     $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)

Có một số phương pháp khác, bạn có thể đọc về từng phương pháp trong tài liệu.


ok..vì vậy, thông thường khi tôi sử dụng sql, nó trả về một đối tượng mysql và tôi phải sử dụng mysqli_fetch_assoc, sau đó tự mình sắp xếp chúng và v.v. nhưng bây giờ tất cả đã được sắp xếp cho tôi. đó là những gì về hydrat hóa, cho tôi các đối tượng / mảng được sắp xếp?
never_had_a_name

4
Không, đó không phải là sắp xếp kết quả ( orderBy()xử lý điều này). Đó là về kết quả truy vấn của bạn , cho dù đó sẽ là một giá trị vô hướng đơn ( HYDRATE_SINGULAR_SCALAR), một mảng hay các mảng trong đó các mảng lồng nhau đại diện cho mỗi bản ghi cơ sở dữ liệu ( HYDRATE_ARRAY) hoặc một tập hợp các đối tượng ( HYDRATE_RECORD). Làm var_dump trên kết quả truy vấn cho mỗi chế độ hydrat hóa - "làm thế nào nó hoạt động" đó là cách tốt nhất để xem
Crozin

4
chỉ là một mẹo nhỏ. Trong 1.2 HYDRATE_SINGULAR_SCALARtrả về một lỗi hằng số không xác định. HYDRATE_SINGLE_SCALARđúng.
Darmen Amanbayev

1
Là một lưu ý Doctrine::HYDRATE_RECORDbây giờ được gọi làDoctrine::HYDRATE_OBJECT
Steve Tauber

1
Một liên kết đến tài liệu nói trên sẽ làm cho câu trả lời này hữu ích hơn.
Sean the Bean

2
$q->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);

Nó sẽ chỉ trả về một mảng đơn giản thay vì một đối tượng thu thập học thuyết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.