2016-08-12 21 views
13

Sản phẩm có mối quan hệ một-nhiều, 'productbrand', với productbrand bảng và productbrand có mối quan hệ một-một, 'thương hiệu', với thương hiệu bảng. Bảng thương hiệu có một cột, 'thương hiệu'. Và tôi có thể truy cập vào thương hiệu của sản phẩm. Tất cả các danh mục khác, tên người dùng, v.v ... đều được truy cập đúng cách.Truy cập các mối quan hệ Laravel trong mã JavaScript

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; 
} 

Ajax và 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); 
     } 
    } 
}); 

Bằng cách này tôi có thể nhận được chỉ có một thương hiệu. Tôi cũng đã thử theo cách sau, nhưng thất bại.

Trong bộ điều khiển:

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

Trong Ajax:

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

Hãy thử điều này: $ show = Product :: where (['product_id' => $ id]) -> với ('productbrand') -> first(); –

+0

@Autista_z sự cố đang truy cập bằng javascript. – micky

+0

Tôi đã viết một câu trả lời, nhưng tôi đã nhận thấy rằng mã của bạn rất, rất lạ. Tôi thực sự đề nghị bạn hãy xem các bài học www.laracasts.com, bạn sẽ học được rất nhiều về laravel. Chúc may mắn. –

Trả lời

6

Tại sao khai báo tất cả các biến này:

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

Nếu thể loại, người dùng, productbrand và sau đó thương hiệu là mô hình liên quan với sản phẩm và để lấy loại từ thể loại, tên người dùng từ người dùng vv

Thay vì duy trì các mối quan hệ với 'với';

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; 

Và trong JavaScript:

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

sản phẩm có liên quan onetomany 'productbrand' với bảng productbrand và productbrand có quan hệ onetoone 'thương hiệu' với bảng thương hiệu. thương hiệu bảng có cột 'thương hiệu'. Và không phải là không thể truy cập vào thương hiệu của sản phẩm. Truy cập thương hiệu như thế này.

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

Tôi nghĩ rằng bạn nên tạo một tuyến đường và sử dụng AJAX để có được dữ liệu bạn cần. Khi bạn chuyển dữ liệu đến DOM mà javascript sử dụng nó không có bất kỳ kiến ​​thức nào về các quan hệ đối tượng mà bạn đã xác định trong Laravel.

3

Sử dụng cách đầu tiên của bạn.

Thay đổi $brand=$getbrand->brand->brand; để $brand[] = $getbrand->brand->brand;

Và sau đó trong js bạn có thể đi qua những thương hiệu như thế này:

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

nhãn hiệu Tuy nhiên nhận được như thế này sẽ làm được rất nhiều truy vấn cơ sở dữ liệu.

Thay vào đó, bạn có thể sử dụng tải mong muốn.

Như thế này:

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

Và truy cập nó theo cùng một cách trong js như trước đây.

PS: Tôi giả sử bạn đang sử dụng laravel 5.2.

Các vấn đề liên quan