Hiện tại không có cách dễ dàng. Tuy nhiên tôi tìm thấy cách giải quyết này, cho đến nay đã làm việc cho tôi.
Trước tiên, bạn phải mở rộng Illuminate\Database\Query\Builder
.
<?php
class ModifiedBuilder extends Illuminate\Database\Query\Builder {
protected $forgetRequested = false;
public function forget()
{
$this->forgetRequested = true;
}
public function getCached($columns = array('*'))
{
if (is_null($this->columns)) $this->columns = $columns;
list($key, $minutes) = $this->getCacheInfo();
// If the query is requested ot be cached, we will cache it using a unique key
// for this database connection and query statement, including the bindings
// that are used on this query, providing great convenience when caching.
$cache = $this->connection->getCacheManager();
$callback = $this->getCacheCallback($columns);
if($this->forgetRequested) {
$cache->forget($key);
$this->forgetRequested = false;
}
return $cache->remember($key, $minutes, $callback);
}
}
Sau đó, bạn phải tạo lớp mới mở rộng Mô hình Eloquent.
<?php
class BaseModel extends Eloquent {
protected function newBaseQueryBuilder() {
$conn = $this->getConnection();
$grammar = $conn->getQueryGrammar();
return new ModifiedBuilder($conn, $grammar, $conn->getPostProcessor());
}
}
Bây giờ khi tạo mô hình hùng hồn, thay vì mở rộng Eloquent
Models mở rộng mới được tạo ra BaseModel
.
Bây giờ bạn có thể remember
kết quả truy vấn như bình thường.
YourModel::remember(10)->get();
Khi bạn muốn loại bỏ các kết quả lưu trữ tất cả các bạn phải làm là
YourModel::forget()->get();
Nếu bạn còn nhớ kết quả trước đó, sau khi thanh toán bù trừ các kết quả lưu trữ, mô hình sẽ tiếp tục nhớ kết quả cho điều đó khoảng thời gian.
Hy vọng điều này sẽ hữu ích.
không lý thuyết, btw. –
Không phải bây giờ nó đã được trả lời nhưng tại thời điểm đó là vì không có tài liệu về việc sử dụng các khóa bộ nhớ cache với hùng hồn –