を更新するイベントを検出するために、Model Observersを使用現在のところ簡単な方法はありません。しかし、これまで私が働いていたこの回避策が見つかりました。
まず、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);
}
}
次に、Eloquent Modelを拡張する新しいクラスを作成する必要があります。
<?php
class BaseModel extends Eloquent {
protected function newBaseQueryBuilder() {
$conn = $this->getConnection();
$grammar = $conn->getQueryGrammar();
return new ModifiedBuilder($conn, $grammar, $conn->getPostProcessor());
}
}
は今の代わりに新しく
BaseModel
を作成延びて
Eloquent
モデルを拡張する、雄弁モデルを作成するとき。
今度はremember
いつものようにクエリ結果できます。あなたがキャッシュされた結果を破棄したいときにあなたがしなければならないすべてはあなたが以前に結果を覚えている場合は、キャッシュされた結果をクリアした後、モデルはそのための結果を覚えていきます
YourModel::forget()->get();
ある
YourModel::remember(10)->get();
時間の長さ。
これが役に立ちます。
理論的ではない、btw。 –
これは答えられていませんが、現時点では、雄弁にキャッシュキーを使用することに関する文書がなかったためです。 –