2017-03-06 4 views
0

Ich habe gerade angefangen, Lebensmittelgeschäft Crud zu erkunden. Ich möchte die Werte aus mehreren verknüpften Tabellen auflisten. Gemäß ihren Anleitungen/Tutorials versuchte ich, die Lösung zu finden, konnte aber keine Lösung finden. Erwartete Abfrage und Lösung ist auf diesen Link http://sqlfiddle.com/#!9/0c5faf/3Auflistung von mehreren Tabellen in Lebensmittelgeschäft Crud

$crud = $this->generate_crud('admin_users_groups'); 
$crud->where('group_id','3'); 
$crud->columns('user_id','DistID'); 
$crud->display_as('user_id','user'); 
$crud->set_relation('id', 'dist_info', 'ref_idkey'); 
//$crud->set_relation_n_n('groups', 'users_groups','groups','user_id','group_id','description'); 
//$crud->set_relation('user_id', 'admin_users', '{username} - {first_name}{last_name}'); 
//$crud->set_relation_n_n('DistID', 'admin_users','dist_info','id','id','ref_idkey'); 
//$crud->set_relation('user_id', 'admin_users', 'email');  
//$crud->set_relation_n_n('id', 'admin_users_groups', 'admin_users', 'id','dist_id', 'name'); 
//$crud->set_relation_n_n('groups1', 'admin_users_groups', 'admin_groups','user_id', 'group_id', 'name');` 

Kann jemand mir helfen, um die gewünschte Lösung zu erreichen?

Antwort

0

Sie verpassen nur einige Spalten in Ihrer Tabelle. Aber der eigentliche Trick ist, dass Sie die ID-Spalte zweimal anzeigen möchten, zuerst um die ID anzuzeigen, und dann im set_relation-Aufruf, aber Sie können das nicht tun, da die Bibliothek offensichtlich nicht weiß, wohin sie gehen soll. Sie haben zwei Möglichkeiten: Erstellen Sie ein benutzerdefiniertes Modell, um eine Verknüpfung der beiden Tabellen zu ermöglichen, oder verwenden Sie einen Rückruf, um manuell die benötigten Daten abzurufen. Die zweite Wahl sollte viel einfacher sein:

$crud = $this->generate_crud('admin_users_groups'); 
$crud->where('group_id','3'); 
$crud->columns('id, 'group_id, 'user_id','DistID') 
$crud->display_as('user_id','user'); 
$crud->callback_column('DistID', array($this, 'callback_distID'); 
... 
} 

public function callback_distID($value, $row) { 
    //Load your model for the 'dist_info' 
    $this->load->model('Dist_info_model); 
    $dist = $this->Dist_info_model->get_dist_info($row->id); 
    return $dist['ref_idkey']; 

Dann in Ihrem Modell:

public function get_dist_info($id) { 
    return $this->db->getwhere('Dist_info', array('recid'=>$id))->row_array; 
+0

für jeden So DISTID wird es einzelne Abfrage nennen. Für 100 Zeilen ... 100 Abfragen. Gibt es keinen besseren Weg oder durch Ändern der Tabellenstruktur oder etwas? – TechCare99

+1

Ja, es würde die Dinge wirklich vereinfachen, wenn Sie einfach eine Spalte zur Tabelle admin_users_groups hinzufügen, die die ID-Spalte einfach dupliziert. Wenn also diese neue Spalte 'ref_id' heißt, dann müssten Sie nur die Zeilen '$ crud-> (' id, 'group_id', 'user_id', 'ref_id'); 'und' ändern $ crud-> set_relation ('ref_id', 'dist_info', 'ref_idkey'); ' – Pacio

+0

Wenn Sie aus irgendeinem Grund die Tabellenstruktur nicht ändern möchten, beschränken Sie sich auf die oben angegebene Antwort oder verwenden Sie a benutzerdefiniertes Modell (Der Ersteller der Bibliothek hat den Code veröffentlicht, den Sie hier benötigen: http://www.grocerycrud.com/forums/topic/264-join-tables/#entry1018 – Pacio

Verwandte Themen