2014-04-23 11 views
6

Mein Problem ist es, 2 Tabellen im Laravel-Framework beizutreten. Eine ist dynamische Namenstabelle (es ist eine Variable) und zweite hat zusammengesetzte Primärschlüssel. Ich muss Abfrage-Generator anstelle von wo() verwenden. Sehen Sie bitte meine folgenden Details:Laravel - Beitreten mit einer Tabelle mit Composite-Primärschlüssel

Ich habe 2 Tabellen:

CREATE TABLE `details` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `source_id` int(10) unsigned NOT NULL, 
    `brand_id` int(10) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
); 
CREATE TABLE `links` (
    `source_id` int(10) unsigned NOT NULL, 
    `brand_id` tinyint(3) unsigned NOT NULL DEFAULT '1', 
    PRIMARY KEY (`source_id`,`brand_id`) 
); 

Nun, ich brauche 2 diese Tabellen zu verknüpfen, verwende ich diesen Code:

<?php $results = \DB::table('details') 
      ->join('links', function($join) 
      { 
       $join->on('details.source_id', '=', 'links.source_id'); 
       $join->on('details.brand_id','=', 'links.brand_id'); 
      }) 
      ->get();?> 

Es ist ganz einfach beitreten diese Tabelle, OK. Aber mein Problem ist der Tabellenname ist dynamisch.

<?php 
$type = Input::get('type', null); 
$table = $type . '_details'; 
$results = \DB::table($table) 
       ->join('links', function($join) 
       { 
        // the following code will show errors undefined $table 
        $join->on($table . '.source_id', '=', 'links.source_id'); 
        $join->on($table . '.brand_id','=', 'links.brand_id'); 
       }) 
       ->get(); 

?> 

Bitte helfen Sie mir, dieses Problem zu lösen. Vielen Dank !!!

Antwort

9

Sie müssen Variablen aus dem lokalen Bereich der anonymen Funktion des Oszilloskops importieren, das ist, wie:

$results = \DB::table($table) 
       ->join('links', function($join) use ($table) 
       { 
        $join->on($table . '.source_id', '=', 'links.source_id'); 
        $join->on($table . '.brand_id','=', 'links.brand_id'); 
       }) 
       ->get(); 

Beachten Sie die Zeile:

->join('links', function($join) use ($table) 

Problem Ist die anonyme Funktion nicht über die Variable $table bekannt, so erzählen Sie sie über die Variable use.

Sie können es in der docs finden.

+0

Vielen Dank !!! Ich benutzte einen dummen Weg ist SESSION, das zu tun. ^^ – Kame

+0

@Kame Kein Problem, ich hatte das gleiche Problem, als ich anfing, PHP zu lernen. :) – majidarif

3

Bitte versuchen:

<?php 
$type = Input::get('type', null); 
$table = $type . '_details'; 
$joinFunction = function($join) use ($table) 
       { 
        $join->on($table . '.source_id', '=', 'links.source_id'); 
        $join->on($table . '.brand_id','=', 'links.brand_id'); 
       } 
$results = \DB::table($table) 
       ->join('links',$joinFunction) 
       ->get(); 

?> 

Das Problem war, dass die Funktion nicht den $ Tabellenvariable im Innern sieht. Deshalb müssen Sie die Anweisung "use" verwenden.

Lesen Sie mehr über anonymous functions in php here

Verwandte Themen