获取关系 table 数据为空

get relations table data is empty

我正在使用 laravel 8。 我尝试获取具有多对多关系的数据,但给我相关 table

的空数据

这是数据库

订单型号

 public function products()
    {
        return $this->belongsToMany(Product::class);
    }

产品型号

    public function orders(): \Illuminate\Database\Eloquent\Relations\BelongsToMany
    {
        return $this->belongsToMany(Order::class);
    }

获取查询是

        $orders = Order::query()->with("products")->get();

结果

我也在查看

        $orders = Order::query()->has("products")->get();

给我同样的结果

首先,如果您像这样编辑查询,它将起作用

 $orders = Order::fist();
 $orders->products;

为什么? 因为枢轴 table.

什么是支点table?让我解释一下。

当您使用 many-to-many 关系时,您必须定义一个中间 table 就像您的 table:order_prodcts。 所以 Laravel 这里提供了一些非常有用的方法来与这个 table.

进行交互

所以这是一个 database 结构:

orders:
   - id
   - title

products:
   - id
   - title

order_product:
   - id
   - title

列表中最后的table:order_product被称为pivottable

举个例子

让我们假设我们的 Order 模型有许多 Product 模型与之相关。访问此关系后,我们可以使用您在模型上定义的关系方法访问中间 table,例如:

1-您的 Product 型号

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    //some code

    public function orders()
    {
        return $this->belongsToMany(Product::class);
    }
}

2-您的 Order 型号

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    //some code

    public function produtc()
    {
        return $this->belongsToMany(Order::class);
    }
}

在这里,我们检索到的每个产品模型都会自动分配一个关联方法。这种关系方法包含一个代表中间的模型 order_product table.

所以在这里试着用你的产品让你下订单

public function index()
{

    $orders = Order::get();
    dd($orders->products); //Laravel will handel the pivot and will return your order products
}

现在,使用pivot的时候有几点需要注意

  • Pivot table 字段默认应该只有两个字段:每个 table 的外键 order_id product_id

  • 枢轴名称 table 应包含 singular 个名称

  • 在您的情况下,名称应按 alphabetical 顺序排列 op 的第一个,因此您的 table 将被称为 order_product

最后感谢您完成阅读我希望您从这个答案中获得任何信息