2015-02-18 13 views
5

Giả sử tôi có bảng A với bản ghi hoạt động của nó trong yii2, Cách tốt nhất để có thể tải bản ghi với ngày tạo tối đa cho mô hình là gì.Yii2 chọn theo ngày tối đa?

Đây là truy vấn:

 select * 
    from A 
    where created_date = (
     select max(created_date) from A 
    ) 

Bây giờ tôi nhận được ngày max đầu tiên sau đó sử dụng nó trong việc tiếp cận khác để cơ sở dữ liệu ví dụ:

$max = A::find()->select("created_date)")->max(); 
    $model = A::find()->where("created_date = :date",[":date"=>$max])->one(); 

Tôi chắc chắn rằng điều này có thể được thực hiện với một truy cập vào cơ sở dữ liệu, nhưng tôi không biết làm thế nào.

vui lòng trợ giúp.

Trả lời

13

truy vấn của bạn là tương đương với:

SELECT * FROM A ORDER BY created_date DESC LIMIT 1; 

Bạn có thể đặt hồ sơ của bạn bằng cách created_date thứ tự giảm dần và nhận được tức là kỷ lục đầu tiên:

$model = A::find()->orderBy('created_date DESC')->one(); 
+1

Nên Tôi sử dụng ...-> giới hạn (1) cũng? Thật kỳ lạ nhưng với giới hạn nó hoạt động nhanh hơn cho tôi. Tôi có 2 triệu hàng trong DB – Footniko

+0

@Footniko Theo tài liệu chính thức: Không có yii \ db \ ActiveRecord :: findOne() và yii \ db \ ActiveQuery :: một() sẽ thêm LIMIT 1 vào câu lệnh SQL đã tạo. Nếu truy vấn của bạn có thể trả về nhiều hàng dữ liệu, bạn nên gọi giới hạn (1) một cách rõ ràng để cải thiện hiệu suất, ví dụ: Khách hàng :: tìm() -> giới hạn (1) -> một(). http://www.yiiframework.com/doc-2.0/guide-db-active-record.html – nicolascolman

2

Hãy thử điều này

$model = A::find()->orderBy("created_date DESC")->one(); 
1
$maxdate=A::find()->max('created_date'); 
+0

Thêm một số giải thích với câu trả lời cho cách câu trả lời này giúp OP trong việc khắc phục sự cố hiện tại –

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