2009-11-03 14 views
9

Cuold ai giải thích cho tôi sự khác biệt giữa auto thuyết file <ModelName>.class.php<ModelName>Table.class.php tạo? Ví dụ trong hướng dẫn Jobeet có JobeetJob.class.php và JobeetJobTable.class.php.Symfony chênh lệch giữa <ModelName> .class.php và <ModelName> Table.class.php

Tôi không hiểu vai trò của từng tệp và nơi tôi phải đặt các phương thức cho lớp mô hình.

+0

Điều này rất giống với: http: //stackoverflow.com/questions/11714387/choosing-between-symfonys-doctrine-orm-files-model-class-php-and-modeltable-cla/11729994#11729994 – Omn

Trả lời

3

XXX.class tệp giữ Doctrine_Record hậu duệ, được dự định để hoạt động trên một bản ghi duy nhất. Lưu, tạo, chỉnh sửa v.v. XXXTable.class.php giữ con cháu Doctrine_Table, được dùng để hoạt động trên toàn bộ bảng. Tìm kiếm các bản ghi chẳng hạn.

+0

Fractalizer, do đó chúng tôi có thể phỏng đoán việc tạo, chỉnh sửa, xóa các chức năng sẽ thuộc về XXX.class và tất cả các truy vấn như - chọn từ nơi> .... sẽ là một phần của XXXTable.class.php? –

+0

Đối với các truy vấn, bạn có thể sử dụng DQL tốt hơn. Nó mạnh hơn. –

2

Tệp Modelname.class.php của bạn giữ lớp chứa, ví dụ như Đăng. Lớp này có tất cả các phương thức và thuộc tính của một hàng trong bảng của bạn, ví dụ như bảng Post. Nếu bạn có các cột trong bảng như id, văn bản, v.v., bạn sẽ có thể truy cập chúng thông qua lớp Post.

Tuy nhiên, lớp PostTable của bạn (hoặc lớp XxxxxTable) là tham chiếu bảng, có nghĩa là lớp này phải chịu trách nhiệm truy vấn bảng để tìm nạp dữ liệu.

Hãy để tôi đưa ra một ví dụ ngắn gọn. Cho phép nói rằng bạn muốn rút ra một bài duy nhất từ ​​bảng và sau đó chỉnh sửa đó.

Trước tiên, bạn sẽ làm như $post = Doctrine::getTable('Post')->findOneById(1); Điều này được thực hiện từ lớp bảng vì bạn sẽ muốn lấy ra một số dữ liệu từ một bảng cụ thể.

Bây giờ bạn có bài đăng của mình (như trong đối tượng Bài đăng), bởi vì ->findOneById(...) đã truy vấn cơ sở dữ liệu cho bạn. Sau đó, bạn có thể chỉnh sửa điều đó, ví dụ: $post->title = "a nice title". Cuối cùng, lưu bài đăng của bạn với $post->save();.

Trường hợp ngoại lệ cho điều này là khi bạn muốn tìm nạp các đối tượng liên quan, ví dụ như có thể là câu trả lời cho bài đăng của bạn. Điều này sẽ được thực hiện thông qua đối tượng bạn đã kéo ra $post.

Tôi hy vọng tôi đã làm rõ vấn đề của mình - nếu không, vui lòng không ngần ngại đặt thêm câu hỏi.

+2

Tôi muốn giải thích thêm về lớp Table, bạn có thể mở rộng chức năng của lớp này bằng cách viết các phương thức của riêng bạn, ví dụ nếu bạn luôn truy vấn bảng Events bằng cách tìm kiếm các sự kiện sắp tới, bạn có thể có Doctrine :: getTable ("Sự kiện") -> getUpcomingEvents() làm ví dụ. – richsage

+0

Có, nhưng bạn có thể làm điều đó với lớp khác. Giả sử bạn có một mô hình với "firstname" và "lastname" - sau đó bạn có thể thực hiện phương thức -> getFullName(). Điểm quan trọng mặc dù. – phidah

Các vấn đề liên quan