我正在尝试创建一个单页应用程序,其中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)}}
有谁知道更简单的解决方案?似乎这将是一个常见的问题。
感谢。
答案 0 :(得分:3)
在Laravel后端获取产品时,不要只使用
Product::find($id);
但是
Product::with('brand')->find($id);
你去了:)对应的文档部分:http://laravel.com/docs/4.2/eloquent#eager-loading