首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有附加函数和传递参数的Laravel模型

具有附加函数和传递参数的Laravel模型
EN

Stack Overflow用户
提问于 2016-07-29 19:00:06
回答 1查看 1.9K关注 0票数 0

所以,我有一个&*^%的时间与这一次。我做了一些调查,但我似乎找不到正确的(或可能的)方法来完成我想要的事情。

一些背景故事。我编写这个查询是为了直接与nv3d图形库集成,这就是为什么数据结构对我来说如此重要,以及如何正确地限定数据的范围。

首先,我们有一个模型查询“产品”,这创建了一个很好的有序列表与id,标题和颜色。

代码语言:javascript
运行
复制
Product::whereCuId(auth()->user()->cu_id)
        ->whereCategoryId($id)
        ->orderBy('sort_order', 'ASC')
        ->select('id as id','title AS key', 'color AS color')
        ->get();

它返回给我以下内容。

代码语言:javascript
运行
复制
{
"id": 1,
"key": "Title 1",
"color": "#ffbd13",
}
{
"id": 2,
"key": "Title 2",
"color": "#8f8f8f"
}
(etc)

第一步:很好!

接下来,在产品模型中,我将向每个产品添加日期/值。这就是问题所在。

如何将参数传递给这个辅助查询,如日期计数、范围等?!

代码语言:javascript
运行
复制
protected $appends = array('values');
    public function getValuesAttribute() {
        return $values=Checkin::whereProductId($this->id)
            ->groupBy('date')
            ->orderBy('date', 'ASC')
            ->whereRaw('Date(created_at) > CURDATE() - INTERVAL 21 day')
            ->get(array(
                DB::raw('1000*UNIX_TIMESTAMP(Date(created_at)) as date'),
                DB::raw('COUNT(id) as total')
            ));
    }

显然,我可以使用目前在上面的查询中的.

代码语言:javascript
运行
复制
->whereRaw('Date(created_at) > CURDATE() - INTERVAL 21 day') 

但是,如何才能将参数从初始控制器(调用产品模型)传递到模型内部的子函数中,然后说…将上面的"21“设置为我传入的变量?

提前感谢大家的帮助!

这是数据格式的最终目标,因为它目前存在(不能更改天数范围),只是作为一个例子。

代码语言:javascript
运行
复制
{
"id": 1,
"key": "Title 1",
"color": "#ffbd13",
"values": [
  {
  "date": 1468047600000,
  "total": 4
  },
  {
  "date": 1468134000000,
  "total": 1
  },
  {
  "date": 1468220400000,
  "total": 1
  },
  {
  "date": 1468306800000,
  "total": 2
  }]
}
{
"id": 2,
"key": "Title 2",
"color": "#8f8f8f"
}
(etc)
EN

回答 1

Stack Overflow用户

发布于 2016-07-29 20:56:56

我想你是想找个了结。没有测试它,但是应该给你一个想法:

代码语言:javascript
运行
复制
$yourVar = 21;
$values=Checkin::whereProductId($this->id)
        ->groupBy('date')
        ->orderBy('date', 'ASC')
        ->where(function ($query) use ($yourVar) {
            $query->whereRaw('Date(created_at) > CURDATE() - INTERVAL '.$yourVar.' day'));
        })
        ->get(array(
            DB::raw('1000*UNIX_TIMESTAMP(Date(created_at)) as date'),
            DB::raw('COUNT(id) as total')
        ));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38665832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档