首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >jQuery DataTables母版/详细信息(子行)作为laravel部分视图

jQuery DataTables母版/详细信息(子行)作为laravel部分视图
EN

Stack Overflow用户
提问于 2015-07-09 07:15:00
回答 1查看 4.2K关注 0票数 0

我有一个Laravel应用程序,在这里我使用jQuery DataTables (yajra/datatables插件)来显示一些记录。我还使用3个子行来为它们显示更详细的信息。在子行中,我显示了一些额外的信息,一个包含内容的年度数据的图表,以及过去6个月的记录值。问题是,我不能像填充第一个数据那样,用最后两个子行填充数据,因为我不能将所有数据都放在一个查询中。

下面是为DataTable提供信息的控制器方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function getRowDetails()
{
    return view('reports.creates', compact('data'));
}

public function getRowDetailsData()
{

    $kpi = $this->getUserActiveKpi();
    $data = DB::table('reports')
              ->orderBy('month','desc')
              ->groupBy('kpi_id')
              ->take(5)
              ->get();
    return Datatables::of($kpi, $data)
              ->make(true);
}

private function getUserActiveKpi(){
    $user = Auth::user();
    $kpis = DB::table('kpis')
              ->where('kpi_status',1)
              ->where('responsible_user', $user->id);
    return $kpis;
}

这是初始化脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(document).ready(function () {
    var table;
    table = $('#monthly_table').DataTable({
        processing: true,
        serverSide: true,
        dom: "fr<'clear'>Ttip",
        ajax: '{{ url("reports/row-details-data") }}',
        tableTools: {.....},
        columns: [.....],
        order: [[1, 'asc']]
    });
});

以下是返回子行数据的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var kpi;
function kpi_info(d) {
    // `d` is the original data object for the row
    return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
    '<tr>' +
    '<td>KPI:</td>' +
    '<td>' + d.kpi_code + '</td>' +
    '</tr>' +
    '<tr>' +
    '<td>Workload:</td>' +
    '<td>' + d.kpi_workload + '</td>' +
    '</tr>' +
    '<tr>' +
    '<td>KPI Description:</td>' +
    '<td>'+ d.kpi_description + '</td>' +
    '</tr>' +
    '</table>'
}
function kpi_values(d) {
    // `d` is the original data object for the row
    kpi = d.id;
    // it returns the id, here I want to return the partial view 
    // that contains the data using the *kpi* as a parameter
    return kpi; 
}
function kpi_graph(d) {
    kpi = d.id;
    // it returns the id, here I want to return the partial view that
    // contains the graph using the *kpi* as a parameter
    return kpi; 
}

下面是向他们展示的功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$('#monthly_table tbody').on('click', 'td.details-control', function () {
        var tr = $(this).closest('tr');
        var row = table.row(tr);
        if (row.child.isShown()) {
            // This row is already open - close it
            row.child.hide();
            tr.removeClass('shown');
        }
        else {
            // Open this row
            row.child(kpi_data(row.data())).show();
            tr.addClass('shown');
        }
    });

现在,我试图实现的是,当我单击其中一个显示childrow的链接时,将kpi参数提供给以下控制器方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function data($id){
    $data = DB::table('reports')
              ->where('kpi_id',$id)
              ->orderBy('month','desc')
              ->take(5)
              ->get();
    return view('reports.data', compact('data'));
}

如果你还有什么需要知道的,请询问,并感谢所有的帮助。

编辑

说到I cannot put all the data inside 1 query,我的意思是我必须结合3个查询才能做到这一点。首先是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DB::table('kpis')
    ->where('kpi_status',1)
    ->where('responsible_user', $user->id);

第二个问题是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DB::table('reports')
    ->where('kpi_id',$id)
    ->orderBy('month','desc')
    ->take(5)
    ->get();

第三个是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DB::table('reports')
    ->where('reports.is_validated',1)
    ->where('reports.year',$current_year)
    ->orderBy('month','asc')
    ->get();

我想不出一个查询可以同时获得所有这些数据。

Note

还有另一个查询,如带有$prev_year参数的最后一个查询。

编辑2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Schema::create('kpis', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('kpi_code');
        $table->string('kpi_description');
    });

Schema::create('reports', function(Blueprint $table)
    {
        $table->increments('id');
        $table->integer('kpi_id')->unsigned()->nullable(); 
        //fk kpi -> values
        $table->float('value');
        $table->integer('month',false,false,'2');
        $table->integer('year',false,false,'4');
    });

Schema::table('reports', function($table){
        $table->foreign('kpi_id')->references('id')->on('kpis');
    });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-10 08:34:23

这段代码需要编辑,但希望您能理解。

我会查看Eloquent: Relationships > Defining Relationships > One To Many以及Datables演示站点页面,EloquentController.php - eloquent.getHasMany.title。

Kpi模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php namespace App;
use Illuminate\Database\Eloquent\Model;

class Kpi extends Model {

  /**
   * Get the reports for the kpi.
   */
  public function reports()
  {
    return $this->hasMany('App\Report')
        ->orderBy('month','desc');
  }
  /**
   * Get the Kpis for a specific user
   */
  public function scopeForUser($query, $user_id)
  {
        $query->where('kpi_status',1)
      ->where('responsible_user', $user_id);
  }
}

报表模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php namespace App;
use Illuminate\Database\Eloquent\Model;

class Report extends Model {
    /**
     * A report belongs to a kpi
     *
     * @return mixed
     */
    public function kpi()
    {
        return $this->belongsTo('App\Kpi');
    }
    /**
     * Get the reports for a specific year
     */
    public function scopeForYear($query, $year)
    {
        $query->where('is_validated',1)
            ->where('year',$year)
            ->orderBy('month','asc');
    }
}

控制器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function getRowDetails()
{
    return view('reports.creates');
}

public function getRowDetailsData()
{
    if (Auth::guest())
    {
        return ['status'=>'error', 'nessage' => 'Unauthorized user.'];
    }
    $user_id = Auth::user()->id;
    $kpis = Kpi::with(['reports' => function($q){
        $q->take(5);
    })->forUser($user_id)->get();
  return Datatables::of($kpis)
           ->make(true);
}

->take(5)可能会将查询限制为每个KPI总共只有5个记录,而不是5个报告。如果是这样的话,请查看这篇文章

按评论更新

它看起来不像你使用的插件提供的嵌套循环

你也许可以这样做,但我从来没有使用过那个插件,所以我不能给你更多的信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
columns: [
  {data: 'kpi_code', name: 'kpi'},
  {data: 'kpi_workload', name: 'workload'},
  {data: 'kpi_description', name: 'description'},
  {data: 'reports[0].name', name: 'report_1'},
  {data: 'reports[1].name', name: 'report_2'},
  {data: 'reports[2].name', name: 'report_3'},
  {data: 'reports[3].name', name: 'report_4'},
  {data: 'reports[4].name', name: 'report_5'}
]    
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31321608

复制
相关文章
jquery grid设置行背景色
项目中有一个需求,可以根据grid中某一列的值来设置该行的背景色,效果如下图所示。
全栈程序员站长
2022/09/14
1.4K0
jquery grid设置行背景色
Java 为 Excel 中的行设置交替背景色
在制作Excel表格时,通过将数据表中上下相邻的两行用不同的背景色填充,可以使各行的数据看起来更清楚,避免看错行,同时也能增加Excel表格的美观度。本文将介绍如何在Java程序中为 Excel 奇数行和偶数行设置交替背景色。
好好学java
2020/04/15
2K0
bootstrap 表格 行背景色
tr,td,th : class active 灰色 success 蓝色 warning 浅黄色 danger 浅红色
用户5760343
2022/01/10
1.3K0
bootstrap 表格 行背景色
ExtJs学习笔记(4)_EditorGridPanel(可编辑的网格控件)
这一节,我们将看到ExtJs功能强大的可编辑网格控件,几乎与VS.Net的GridView功能一样了,但是ExtJs的可是纯JS的UI 一.静态示例(改自ExtJs的官方示例) a.因为我们是采用
菩提树下的杨过
2018/01/24
3.5K0
设置导航栏的背景色和标签栏的背景色
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/51282200
用户1451823
2018/09/13
2.5K0
CSS设置DIV背景色渐变
FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#AC07BD, endColorStr=#f6f6f8); /*IE 6 7 8*/ background: -ms-linear-gradient(top, #AC07BD, #f6f6f8); /* IE 10 */ background:-moz-linear-gradient(top, #AC07BD, #f6f6f8);/
Vicsh
2018/05/16
3K0
typecho设置360智能摘要
按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。
逍遥子大表哥
2021/12/19
3911
typecho设置360智能摘要
Twentytwelve主题文章设置摘要
Twentytwelve是一款简明主题,但首页不能设置文章摘要,简单改动content.php文件一段代码,就可以显示文章摘要。 登录网站后台->外观->主题文件编辑器->找到content.php文件 或者FTP下载修改:路径:wp-content/themes/twentytwelve/content.php 大概40行,找到这一句:
zairun
2022/10/25
4140
pycharm设置背景色及字体_pycharm设置字体
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/175345.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
1.7K0
Extjs grid设置单元格字体颜色,单元格背景颜色,行背景颜色
1.用GridView中的getRowClass方法来实现颜色的渲染,status是在Store中定义的字段
全栈程序员站长
2022/09/18
3.4K0
Extjs grid设置单元格字体颜色,单元格背景颜色,行背景颜色
ExtJS4中设置tabpanel的tab高度问题
  最近碰到个问题,在ExtJS中应该如何设置tabpanel的tab的高度?因为默认情况下,tab的高度太矮了,以至于tab的标题底部字都被截掉。设置了个tabpanel.minHeight = ‘500’,但是这个仅仅是设置tabpanel的高度,而不是设置tabpanel的每个tab的标题的高度。随后,又改成了minHeight:‘50’,好像效果还是不理想。   如果只是为了每个tab的高度的话,自然tab高度依赖于tabpaenl的高度,tabpanel又依赖于外层组件的高度,如果仅仅把tabpa
hbbliyong
2018/03/05
1.9K0
纯CSS根据图片取色设置背景色
前几天无意间访问到了个韩国的动漫视频站,然后看到个页面每个div背景色都不同疑似根据图片进行的取色,然后就想看看他是用什么js设置的,f12一看发现好像不是js,然后我就以为是写死的,想看看怎么写的,结果一看不要紧,学到个骚操作。
泽泽社长
2023/04/17
1.3K0
纯CSS根据图片取色设置背景色
BCG网格控件单独设置颜色
三,CBCGPGridCtrlColorSingleDlg::OnInitDialog中增加如下代码。
全栈程序员站长
2022/11/09
6820
Eclipse设置背景色和字体大小
一、设置Eclipse代码编辑背景色(保护自己从这里开始) 1、打开window / Preference,弹出Preference面板 2、展开General标签,选中Editors选项,展开。 3、选中 Text Editors,右边出现TestEditors面板。 面板中有这样一个选项:Appearance color options ;其中是各种板块颜色的设置,其中有一项是background color,勾掉System Default,点击’color’,弹出 颜色选择面板,选择喜好的颜
苦咖啡
2018/05/08
3.1K0
iOS UIButton设置高亮状态下的背景色
UIButton一般分为高亮的普通两种状态,原生的方法可以设置这两种不同状态下的文字颜色,文字内容,背景图片,按钮图片。但是不能设置按钮的背景色。
Lee坚武
2019/12/18
1K0
pycharm设置背景色及字体_pycharm字体大小设置不了
点击Font可以选择不同字体,点击Size可以调节字体大小,右侧可以看预览效果,最后点击ok即可。
全栈程序员站长
2022/09/27
1.4K0
pycharm设置背景色及字体_pycharm字体大小设置不了
Extjs 项目中常用的小技巧,也许你用得着(4)---Extjs 中的cookie设置
1.ExtJs设置cookie两种方式 其一:设置cookie如下 saveacct=isForm.getForm().findField('itemselector').getValue(); Ext.util.Cookies.set('saveacct',saveacct);  取cookie中数据如下 var validStatus = Ext.util.Cookies.get("saveacct"); alert(validStatus);  其二:设置cookie var cookie = ne
hbbliyong
2018/03/05
1.3K0
Extjs 项目中常用的小技巧,也许你用得着(4)---Extjs 中的cookie设置
iOS-UIButton设置高亮状态下的背景色
UIButton一般分为高亮的普通两种状态,原生的方法可以设置这两种不同状态下的文字颜色,文字内容,背景图片,按钮图片。但是不能设置按钮的背景色。
Lee坚武
2019/12/13
1.8K0
WPF 如何给 Grid 的某一行添加背景色
其实在 WPF 里面是不存在单独设置 Grid 的某一行的配色,但是想要达到这个视觉效果,可以通过 Border 配合做到
林德熙
2022/08/12
2.5K0
ExtJs四(ExtJs MVC登录窗口的调试)
继上一节中实现了验证码http://www.cnblogs.com/aehyok/archive/2013/04/19/3030212.html,现在我们可以进行对登录界面进行整合调试了。
aehyok
2018/09/11
4.4K0
ExtJs四(ExtJs MVC登录窗口的调试)

相似问题

gem5: X86 KVM全系统支持readfile伪指令

10

LDR伪指令

22

MIPS "la“伪指令

12

翻译mips伪指令'rol‘

30

MIPS中用于除法的伪指令

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文