gpt4 book ai didi

php - Laravel - 在触发查询之前执行函数

转载 作者:可可西里 更新时间:2023-10-31 23:47:48 26 4
gpt4 key购买 nike

有没有办法让 Eloquent/raw 查询在查询被触发之前执行一个函数?如果我可以扩展功能以传递参数(无论该函数是否应该在之前运行),那也很好。根据函数的结果(真/假),不应执行查询。

我很乐意使用“DB::listen”的主体,但我不确定是否可以从该函数中停止或运行查询。

这样做的原因是我想自己建立一个小数据仓库,用于将结果永久保存到一个仓库(db)中,而不是一直查询一个庞大的数据库。

我想使用的方法是创建一个查询的散列,检查仓库中是否存在该散列。如果存在,则返回该值。如果不是,则执行查询并将输出与哈希一起保存到仓库中。

有什么想法吗?

/////编辑/////我应该澄清一下,如果需要更新计算值,我想访问查询并更新值。即:12 月的汽车数量:当我在 12 月时,我需要经常更新该值。所以我将执行的查询存储在数据库中并检索它,运行它然后更新值。

////编辑 2///// enter image description here

Github:https://github.com/khwerhahn/datawarehouselibrary/blob/master/DataWareHouseLib.php

我想实现的是挂接到 Laravels 查询/Eloquent 逻辑,并在后台使用数据仓库逻辑。

也许是这样的:

$invalid_until = '2014-12-31 23:59:59'; // date until query needs to be updated every ten minutes
$cars = Cars::where('sales_month', '=', 12)->dw($invalid_until)->get();

如果添加了 dw($date_parameter) 我希望 Laravel 在后台执行数据仓库逻辑,如果在数据库中找到则不再执行查询。

最佳答案

您不需要使用事件来完成此操作。来自 4.2 文档:

Caching Queries

You may easily cache the results of a query using the remember method:

$users = DB::table('users')->remember(10)->get();

In this example, the results of the query will be cached for ten minutes. While the results are cached, the query will not be run against the database, and the results will be loaded from the default cache driver specified for your application.

http://laravel.com/docs/4.2/queries#caching-queries

你也可以将它用于 Eloquent 对象,

例如:User::where($condition)->remember(60)->get()

关于php - Laravel - 在触发查询之前执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26359122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com