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


How to get array with rows related to another table for Bllim Datatable - Laravel

我在Web应用程序上使用Bllim/Datatables包来存储数据表;但我无法检索所有相关的行。

我使用以下代码:

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

我将其发送到数据表::的方法如下:

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;

视图中,我有下一个:

/*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");
}

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

你需要使用下一句话:

/* The client whose ID is 1*/
$client = Client::find(1);
$client->books()
->getQuery()
->getQuery()
->select(array('id', 'ColumnA', 'ColumnB'));

您也可以使用where clausule:

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

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