2014-04-23 11 views
6

के साथ एक तालिका के साथ जुड़ें मेरी समस्या लैरवेल ढांचे में 2 टेबल में शामिल होना है। एक गतिशील नाम तालिका (यह एक चर है) और दूसरा समग्र प्राथमिक कुंजी है। मुझे() के बजाय क्वेरी बिल्डर का उपयोग करना होगा। कृपया विवरण के लिए मेरी निम्नलिखित देखने:लार्वेल - समग्र प्राथमिक कुंजी

2 टेबल है:

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

अब, मैं 2 इन तालिकाओं में शामिल होने की जरूरत है, मैं इस कोड का उपयोग करें:

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

यह काफी शामिल होने के लिए आसान है ये टेबल, ठीक है। लेकिन मेरी समस्या यह है कि तालिका का नाम गतिशील है।

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

?> 

कृपया इस समस्या को हल करने में मेरी मदद करें। बहुत धन्यवाद !!!

उत्तर

9

आप गुमनाम समारोह की गुंजाइश के लिए स्थानीय दायरे से चर आयात करने की आवश्यकता, यह कैसे:

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

सूचना लाइन:

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

समस्या अज्ञात फ़ंक्शन वेरिएबल $table के बारे में नहीं जानता है, इसलिए आप इसे use का उपयोग करके चर के बारे में बताते हैं।

आप इसे docs में पा सकते हैं।

+0

आपको बहुत बहुत धन्यवाद !!! मैंने ऐसा करने के लिए एक बेवकूफ तरीका इस्तेमाल किया है। ^^ – Kame

+0

@ केम कोई समस्या नहीं, मुझे एक ही समस्या थी जब मैंने PHP सीखना शुरू किया। :) – majidarif

3

प्रयास करें:

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

?> 

समस्या यह थी कि समारोह इसके अंदर $ तालिका चर नहीं देखता। यही कारण है कि आपको "उपयोग" कथन का उपयोग करने की आवश्यकता है।

और पढ़ें के बारे में anonymous functions in php here

संबंधित मुद्दे