2016-08-12 13 views
13

商品には、商品ブランド「productbrand」とテーブルproductbrandとproductbrandとの間に一対一の関係「ブランド」とテーブルブランドがあります。テーブルブランドには「ブランド」の列があります。そして私はその製品のブランドにアクセスすることができます。その他のカテゴリ、ユーザー名などはすべて正しくアクセスされます。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と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); 
     } 
    } 
}); 

この方法です。私も次の方法で試しましたが失敗しました。

コントローラで

:私はあなたがルートを作成し、必要なデータを取得するために、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

このお試しください: $ショー=製品::([ 'product_idを' => $のID]) - >( 'productbrand')と - )(最初の>を。 –

+0

@Autista_z問題はjavascriptでアクセスしています。 – micky

+0

私は答えを書いていましたが、私はあなたのコードが非常に奇妙であることに気付きました。私は本当にwww.laracasts.comレッスンを見てみることをお勧めします、あなたはlaravelについてたくさん学ぶでしょう。がんばろう。 –

答えて

6

なぜ、これらすべての変数宣言:その後、カテゴリ、ユーザー、productbrandとブランド製品とモデルの関係で、カテゴリからカテゴリをフェッチする場合は代わりに維持

など、ユーザーからユーザー名を

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

を「with」との関係。

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; 

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

製品は、テーブルproductbrandとproductbrandとonetomany関係 'productbrandは' テーブルのブランドとonetoone関係 'ブランド' を持っています。テーブルブランドには「ブランド」の列があります。そして、製品のブランドにアクセスすることができないわけではありません。このようなブランドにアクセスします。

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

:アヤックスで

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

。 javascriptが使用するDOMにデータを渡すと、Laravelで定義したオブジェクトリレーションに関する知識がありません。

3

最初の方法を使用してください。あなたはこのようなブランドの上に行くことができます$brand=$getbrand->brand->brand; jsの中

そして$brand[] = $getbrand->brand->brand;

変更:このような

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の中に同じように。

PS:私はあなたがlaravel 5.2を使用していると仮定しています。

関連する問題