Laravel-在ajax响应数据中访问来自产品(belongsTo)的子类别


Laravel - Access subcategory from product (belongsTo) in ajax response data.

一个产品有一个子类别。在我的产品表中,我有subcategory_id字段。我还建立了产品和子类别模型之间的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的产品一样。因此,在拉拉维尔,它将是:

$subcategory = $product->subcategory;

我以为product.subcategory会起作用,但我没有定义。这是我的ajax成功函数:

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

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

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

protected $with = array('subcategory');

在我的子类别模型中:

protected $with = array('category');

现在,我可以从ajax成功响应数据中轻松地访问它们。

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

如果你想每次都将子类别加载到你的产品中,那么你必须更新你的模型并添加一个with属性,比如:

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

或者,如果你只想做一次,那么你必须做一些类似的事情:

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