如何获取与 Bllim Datatable 的另一个表相关的行的数组 - Laravel

Posted

技术标签:

【中文标题】如何获取与 Bllim Datatable 的另一个表相关的行的数组 - Laravel【英文标题】:How to get array with rows related to another table for Bllim Datatable - Laravel 【发布时间】:2015-02-10 00:38:40 【问题描述】:

我将 Bllim/Datatables 包用于我的 Web 应用程序中的数据表;但我无法检索所有相关行。

我使用下面的代码:

$books= $client->books()->where('books.type', 0);

然后我将它发送到 Datatables::of 方法如下:

return Datatables::of($books)
    ->edit_column('type', '$type')
    ->edit_column('created_at', function($obj) 
    return $obj->created_at->format('d/m/Y (h:i)');
)
->set_index_column('id')
->make();

但所有这些都返回内部服务器错误 (500) 并带有以下消息:

"error":
   
   "type":"ErrorException",
   "message":"Undefined property: Illuminate\\Database\\Eloquent\\Builder::$columns",
   "file":"\/var\/www\/clients\/myapp\/vendor\/bllim\/datatables\/src\/Bllim\/Datatables\/Datatables.php",
   "line":256
   

我的数据库结构:

create table clients(
    id int not null auto_increment,
    name varchar(10) not null,
    password varchar(60) not null,
    unique(name),
    primary key(id),
    created_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
    updated_at timestamp NOT NULL DEFAULT now() ON UPDATE now()
)CHARSET utf8 COLLATE utf8_spanish_ci;

/* PIVOT TABLE */
create table book_client(
    id int not null auto_increment,
    book_id int,
    client_id int, 
    primary key(id),
    FOREIGN KEY (book_id ) REFERENCES books(id) ON DELETE CASCADE,
    FOREIGN KEY (client_id ) REFERENCES clients(id) ON DELETE CASCADE
)CHARSET utf8 COLLATE utf8_spanish_ci;

create table books(
    id int not null auto_increment,
    name varchar(50) not null,
    description varchar(500),
    type varchar(10) not null,
    primary key(id),
    created_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
    updated_at timestamp NOT NULL DEFAULT now() ON UPDATE now()
)CHARSET utf8 COLLATE utf8_spanish_ci;

views 我有下一个:

/*In the view of clients*/
public function books()
    return $this->belongsToMany("Book");

/*In the view of books: (yes, in my case, a book could belong to multiple clients*/
public function clients()
    return $this->belongsToMany("Client");

有人知道我需要的制作方法吗?

【问题讨论】:

如果我的问题是混淆...我可以重写它。 【参考方案1】:

你需要使用下一句:

/* The client whose ID is 1*/
$client = Client::find(1);

$client->books()
->getQuery()
->getQuery()
->select(array('id', 'ColumnA', 'ColumnB'));

您也可以使用where 分句:

$client->books()
->getQuery()
->getQuery()
->select(array('id', 'ColumnA', 'ColumnB'))
->where('id','=',1);

注意我使用了两次getQuery(),这是因为Bllim/Datatables需要一个Query/Builder对象。

【讨论】:

感谢您的回答,但它给我一个错误“无数据” 您没有显示完整的错误...但我猜您将使用子句 where 并带有不返回任何行的条件...可能吗? 很高兴为您提供帮助。 我给你50分我的分数^^你能教我Bllim Datatable吗?有什么有趣的网址吗? 你可以在 Github 网站查看Bllim/Datatables:github.com/bllim/laravel4-datatables-package

以上是关于如何获取与 Bllim Datatable 的另一个表相关的行的数组 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Access 2016 中的另一列上选择具有最大值的不同行

jquery datatable - 如何使用渲染函数从另一列获取数据

在 DataTable 列总和中分组

如何根据R中的另一列获取一列的平均值

我如何从另一台服务器的另一个数据库中获取数据? [复制]

如何根据条件使primefaces datatable列可编辑