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

Posted

技术标签:

【中文标题】Laravel - 从 ajax 响应数据中的产品 (belongsTo) 访问子类别。【英文标题】:Laravel - Access subcategory from product (belongsTo) in ajax response data. 【发布时间】:2016-12-01 13:33:24 【问题描述】:

一种产品有一个子类别。在我的产品表中,我有 subcategory_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 响应数据中的关系?

【问题讨论】:

在你的控制器方法中试试这个$products = $tag->products()->with('subcategory')->get(); //belongsTo relationship 试试这个$.each(data, function (i, product) console.log(product.subcategory); ); @zorx 这行得通。但是我有一个产品,它有一个子类别,它有一个类别。现在如何访问该类别?将您的评论作为问题发布,以便我批准。 【参考方案1】:

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

protected $with = array('subcategory');

在我的子类别模型中:

protected $with = array('category');

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

【讨论】:

【参考方案2】:

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

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

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

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

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

【讨论】:

感谢您的回答!我已经找到了解决方案并回答了我的问题。和你的一样。

以上是关于Laravel - 从 ajax 响应数据中的产品 (belongsTo) 访问子类别。的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 发送数组作为 Laravel 的响应

从数据库中检索数据并将其发送到 laravel 中的 ajax

Laravel AJAX 响应

Laravel 中的 Ajax 请求返回一个空对象

我希望将文本类型存储在数据库中,而不是 id Ajax Laravel 7

Laravel 4 响应标头:拒绝基于源域的 ajax 请求