7

Ich verwende Bllim/Datatables-Paket für die Databases auf meiner Webanwendung; aber ich kann nicht alle verwandten Zeilen abrufen.Wie Array mit Zeilen für eine andere Tabelle für Bllim Datatable - Laravel erhalten

Ich verwende den folgenden Code:

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

Und ich sende es zu Datentabellen :: von Verfahren wie folgt:

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(); 

Aber all dies einen Internal Server Error zurückgeben (500) mit der folgen Nachricht:

{"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 
    } 
} 

MY DATABASE STRUKTUR:

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 den Ansichten Ich habe die nächste:

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

Jeder weiß, das Verfahren für Make ich brauche?

+0

Wenn meine Frage ist verwirrend ... Ich kann es umschreiben. – MartaGom

Antwort

3

Sie müssen den nächsten Satz verwenden:

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

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

können Sie die where clausule verwenden auch:

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

Note, die ich getQuery() zweimal verwendet wird, ist dies, weil Bllim/Datatables brauchen ein Query/Builder Objekt.

+0

Danke für Ihre Antwort, aber es wirft mir einen Fehler "Keine Daten" – MartaGom

+1

Sie zeigen nicht den vollständigen Fehler ... Aber ich denke, Sie werden die Clausle 'where' mit einer Bedingung verwenden, die keine Zeile zurückgibt .. . Könnte es sein? – tomloprod

+0

Es tut mir leid, ich wählte den Client hatte keine Bücher !!! Dein Code funktioniert perfekt! – MartaGom