Laravel - 从ajax响应数据中的产品(belongsTo)访问子类别。

时间:2016-07-27 13:41:26

标签: php jquery ajax laravel eloquent

一个产品有一个子类别。在我的产品表中,我有subategory_id字段。我还在Product和Subcategory模型之间建立了belongsTo关系。 所以我有一个方法可以返回具有特定标签ID的所有产品。 这是我的代码:

public function getProductsByTag($tag_id)
{
    $tag = Tag::find($tag_id);
    $products = $tag->products; //belongsTo relationship

    return json_encode(['products' => $products]);
}

然后,在我的ajax请求成功后,我需要访问产品的子类别,就像我访问了标记$tag->products的产品一样。所以在Laravel中它将是:

$subcategory = $product->subcategory;

我认为product.subcategory可以解决这个问题,但我未定义。这是我的ajax成功函数:

success: function (data) {
    $.each(data.products, function (i, product) {
    console.log(product.subcategory);  
   });
},

我的控制台中未定义。如何访问ajax响应数据中的关系?

2 个答案:

答案 0 :(得分:3)

正如我在评论中所说,laravel不会自动加载所有关系,所以你必须这样做。

如果您想将每个子类别加载到您的产品中,那么您必须更新模型并添加with属性,如下所示:

//Product model
protected $with = ['subcategory'];

或者,如果您只想这样做一次,那么您必须执行以下操作:

$products = $tag->products()->with('subcategory')->get();

答案 1 :(得分:2)

我通过提供一个变量来找到解决方案,该变量保存了我需要的模型内部的关系。我在我的产品模型中为子类别添加了一个变量,在我的子类别模型中为类别添加了一个变量。这是它的样子: 在我的产品型号中:

protected $with = array('subcategory');

在我的子类别模型中:

protected $with = array('category');

现在我可以通过我的ajax成功响应数据轻松访问它们。