0

我有 jenssegers(Mongodb 数据库)的 laravel 8 项目,但我的产品和类别模型之间的 hasMany 关系不起作用我的产品 mongo 对象:

{
"_id" : ObjectId("5dcaafb8eaec3701a2774d29")
"category_ids" : [ 
    ObjectId("5dcaacbfeaec37018b508a39"), 
    ObjectId("5dcaacbfeaec37018b508a5d")
]}

和我的类别 mongo 对象:

{
"_id" : ObjectId("5dcaacbfeaec37018b508a39"),
"title" : "category test",
"slug" : "wordpress-plugins"

}

我的产品型号代码:

public function categories() {
    return $this->hasMany(Category::class, 'category_ids', '_id');
}

但下面的代码返回 null :

$product = Product::with('categories')->where('_id', $id)->first();
    dd($product->categories);

请帮助我,谢谢:)

4

2 回答 2

0

您需要$this->belongsToMany在两种模式中使用关系。

public function categories() {
   return $this->belongsToMany(Category::class);
}

public function products() {
   return $this->belongsToMany(Product::class);
}
于 2021-07-02T10:59:11.230 回答
0

好吧,因为您category_ids在产品字段中添加了,我想您的意思是产品属于许多类别,并且每个类别可以附加许多产品。所以这种关系应该以不同的方式声明。那是:

  • CategoryPost使用表/集合创建数据透视模型categories_posts
  • 让集合categories_posts存储product_idcategory_id显示产品属于该类别(而不是将product集合中的类别 ID 保存为数组)
  • 在 Product Model 中定义您的关系如下
// This is what you should rather have in your Product Model
public function categories() {
   return $this->belongsToMany(Category::class, 'categories_products', 'product_id', 'category_id');
}

// While in your Category Model, you can have this if you wish to get all products belonging to a category using the Category instance
public function products() {
   return $this->belongsToMany(Products::class, 'categories_posts', 'category_id', 'product_id');
}
于 2021-07-02T09:23:54.010 回答