2016-08-12 9 views
13

उत्पाद में एक-से-कई संबंध हैं, 'उत्पादब्रांड', टेबल उत्पादब्रांड और उत्पादब्रांड के साथ टेबल ब्रांड के साथ एक-से-एक संबंध, 'ब्रांड' है। टेबल ब्रांड में एक कॉलम, 'ब्रांड' है। और मैं उत्पाद के ब्रांड तक पहुंचने में सक्षम हूं। अन्य सभी श्रेणियों, उपयोगकर्ता नाम, आदि का उपयोग ठीक से किया जाता है।जावास्क्रिप्ट कोड में लार्वा संबंधों तक पहुंच

public function show(Request $request) 
{ 
    if($request->ajax()) 
    { 
     $id = $request->id; 
     if($id) 
     { 
      $show = Product::where(['product_id'=>$id])->first(); 
      $category = $show->category->category; 
      $username = $show->user->username; 
      $getbrands = $show->productbrand; 
      foreach($getbrands as $getbrand) 
      { 
       $brand=$getbrand->brand->brand; 
      } 
      if($show) 
      { 
       echo json_encode(array('status' => TRUE, 'show' => $show, 'username' => $username, 'category' => $category, 'brand' => $brand)); die; 
      } 
     } 
    } 
    echo json_encode(FALSE);die; 
} 

अजाक्स और jQuery:

$.ajax({ 
    type: "POST", 
    url: "{{url('/product/show')}}", 
    data: {id:id}, 
    success: function (data) { 
     var res = $.parseJSON(data); 
     if(res.status == true) 
     { 
      var result = 'Category: ' + res.category + '<br>' + 
         'Product by: ' + res.username + '<br>' + 
         'Brands: ' + res.brand + '<br>' + 
         'Price: ' + res.show.price + '<br>' + 
         'Price type: ' + res.show.price_type + '<br>' + 
         'Product Views: ' + res.show.views + '<br>'; 
      $('#result').html(result); 
     } 
    } 
}); 

इस तरह से मैं केवल एक ही ब्रांड मिल सकता है। मैंने निम्नलिखित तरीके से भी कोशिश की है, लेकिन असफल रहा।

नियंत्रक में:

$getbrands = $show->productbrand; 
echo json_encode(array('status' => TRUE, 'show' => $show, 'username' => $username, 'category' => $category, 'getbrands' => $getbrands)); 

अजाक्स में:

for(var i=0; i<res.getbrands.length; i++) 
{ 
    var brands=res.getbrands[i].brand.brand; //First 'brand' is relation and second is the brand I am trying to access 
} 
+0

आज़माएं: $ शो = उत्पाद :: जहां ([ 'product_id' => $ id]) -> ('productbrand') के साथ -> पहले(); –

+0

@Autista_z समस्या जावास्क्रिप्ट के साथ पहुंच रही है। – micky

+0

मैं एक उत्तर लिख रहा था, लेकिन मैंने देखा है कि आपका कोड बहुत अजीब है। मैं वास्तव में आपको www.laracasts.com सबक देखने के लिए सुझाव देता हूं, आप लार्वेल के बारे में बहुत कुछ सीखेंगे। सौभाग्य। –

उत्तर

6

क्यों इन सभी चर घोषित:

$category = $show->category->category; 
$username = $show->user->username; 
$getbrands = $show->productbrand; 

हैं श्रेणी, उपयोगकर्ता, productbrand और फिर ब्रांडों मॉडल उत्पाद के साथ संबंध और श्रेणी से श्रेणी, उपयोगकर्ता से उपयोगकर्ता नाम, आदि लाने के लिए

इसके बजाय बनाए रखने रहे हैं 'साथ' के साथ संबंध;

public function show(Request $request) 
{ 
    if($request->ajax()) 
    { 
     $id = $request->id; 
     if($id) 
     { 
      $show = Product::where(['product_id'=>$id])->with('category') 
                 ->with('user') 
                 ->with('productbrand.brand') // product has onetomany relation 'productbrand' with table productbrand and productbrand has onetoone relation 'brand' with table brand 
                 ->first(); 
      if($show) 
      { 
       echo json_encode(array('status' => TRUE, 'show'=>$show)); die; 
      } 
     } 
    } 
    echo json_encode(FALSE);die; 

और जावास्क्रिप्ट में:

 if(res.status == true) 
     { 
      var result = 'Category: ' + res.show.category.category + '<br>' + 
         'Product by: ' + res.show.user.username + '<br>' + 
         'Price: ' + res.show.price + '<br>' + 
         'Price type: ' + res.show.price_type + '<br>' + 
         'Product Views: ' + res.show.views + '<br>'; 
      $('#result').html(result); 
     } 
    } 
}); 

उत्पाद onetomany संबंध तालिका productbrand साथ 'productbrand' और productbrand onetoone संबंध 'ब्रांड' तालिका ब्रांड के साथ है। टेबल ब्रांड में एक कॉलम 'ब्रांड' है। और मैं उत्पाद के ब्रांड तक पहुंचने में सक्षम नहीं हूं। इस तरह के ब्रांड का उपयोग करें।

var result = 'Brands: '; 
for(var i=0; i<res.show.productbrand.length; i++) 
{ 
    result += res.show.productbrand[i].brand.brand; 
} 
2

मुझे लगता है कि आप एक मार्ग बनाने और AJAX का उपयोग डेटा प्राप्त करने के लिए करना चाहिए। एक बार जब आप उस डेटा को पास करते हैं जो जावास्क्रिप्ट का उपयोग करता है तो उसे लार्वेल में परिभाषित ऑब्जेक्ट रिलेशनशिप के बारे में कोई जानकारी नहीं है।

3

अपना पहला तरीका उपयोग करना।

बदलें $brand=$getbrand->brand->brand;$brand[] = $getbrand->brand->brand; js में

और फिर करने के लिए आप इस तरह ब्रांडों पर जाने के कर सकते हैं:

for(var i=0; i < res.brand.length; i++) 
{ 
    console.log(brand[i]); 
} 

इस तरह हालांकि हो रही ब्रांडों डेटाबेस क्वेरी की एक बहुत कुछ करना होगा।

इसके बजाय, आप उत्सुक लोडिंग का उपयोग कर सकते हैं।

इस तरह

:

$show = Product::with('productbrand.brand')->where(['product_id'=>$id])->first(); 
$brand = $show->productbrand->pluck('brand')->collapse(); 

और यह पहुँच के रूप में पहले js में एक ही तरह से।

पीएस: मुझे लगता है कि आप लार्वेल 5.2 का उपयोग कर रहे हैं।

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