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) 访问子类别。的主要内容,如果未能解决你的问题,请参考以下文章
从数据库中检索数据并将其发送到 laravel 中的 ajax