2015-01-20 135 views
2

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

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

随着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> 

具有角,我希望我能做到这一点:

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

,我能想到的唯一的解决办法是让一个单独的API调用的品牌模型和数据存储到一个地图对象。然后我可以打电话:@ {{brandMap.get(product.brand_id)}}

有谁知道更简单的解决方案吗?看起来这将是一个普遍的问题。

谢谢。

回答

2

当你Laravel后端获取的产品不只是使用

Product::find($id); 

而是

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

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

+0

这正是我需要!谢谢 – 2015-01-20 21:46:04

+0

我会感激upvote和复选标记;) – 2015-01-20 21:48:01

+0

我会,但需要15声望。给我一个upvote,我可能会! ;) – 2015-01-20 21:55:49