获取关系 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
被称为pivot
table
举个例子
让我们假设我们的 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
顺序排列 o
是 p
的第一个,因此您的 table 将被称为 order_product
最后感谢您完成阅读我希望您从这个答案中获得任何信息
我正在使用 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
被称为pivot
table
举个例子
让我们假设我们的 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
顺序排列o
是p
的第一个,因此您的 table 将被称为order_product
最后感谢您完成阅读我希望您从这个答案中获得任何信息