Laravel - 使用AngularJS访问关系模型

时间:2015-01-20 21:34:52

标签: angularjs laravel

我正在尝试创建一个单页应用程序,其中AngularJS作为我的前端,Laravel作为我的后端。在尝试创建需要访问与另一个模型的关系的表时,我遇到了一个问题。

对于这个例子,假设我有一个显示产品的表。每个产品都有一个品牌。

使用Laravel的刀片语法,我可以通过使用:

来解决这个问题
<table class="table table-bordered">
  <tr>
    <th>Name</th>
    <th>Brand</th>
  </tr>
  @foreach($products as $product)
  <tr>
    <td>{{ $product->name }}</td>
    <td>{{ $product->brand->name }}</td>
  </tr>
  @endforeach
  <!-- End of product entry for {{ $product.name }} -->
</table>

使用Angular,我希望我能做到这一点:

<table class="table table-bordered">
  <tr>
    <th>Name</th>
    <th>Brand Id</th>
  </tr>
    <tr ng-repeat="product in products">
      <td>@{{ product.name }}</td>
      <td>@{{ product.brand.name }}</td>
    </tr>
  <!-- End of product entry for @{{ product.name }} -->
</table>

不幸的是,@ {{product.brand.name}}不起作用,似乎没有简单的方法来访问父关系。

仅供参考,我的控制器看起来像这样:

app.controller('CtrlProducts', function($scope, $http){

  $scope.products = [];

  $http.get('/api/products').
    success(function(data, status, headers, config) {
      angular.forEach(data, function(product){
        $scope.products.push(product);
      });
    }).
    error(function(data, status, headers, config) {
      console.log(data);
    });
});

我能想到的唯一解决方案是对Brand模型进行单独的api调用,并将数据存储到地图对象中。然后我可以打电话:@ {{brandMap.get(product.brand_id)}}

有谁知道更简单的解决方案?似乎这将是一个常见的问题。

感谢。

1 个答案:

答案 0 :(得分:3)

在Laravel后端获取产品时,不要只使用

Product::find($id);

但是

Product::with('brand')->find($id);

你去了:)对应的文档部分:http://laravel.com/docs/4.2/eloquent#eager-loading