Php 创建为中间表的items表的雄辩关系
我有三张桌子——书、订单、物品 我将订单数据(订单id、用户id)保存在订单表中,而图书id保存在项目表中,因为用户可以添加多本图书 书 命令 项目 我试图显示订单详细信息和订单id下预订的书籍,但我对使用关系感到困惑。 由于所有数据都存储在订单表中,因此我能够成功显示订单详细信息。 但我无法显示订购的图书对应的订单ID 范本 模型订单 控制器 路线 我能够获取结果,但我不确定如何将结果隔离到订单id 如果我的数据库实现错误且不可扩展,我愿意接受建议 简言之,我正在尝试显示各个订单的书籍详细信息 注:Php 创建为中间表的items表的雄辩关系,php,sql,laravel,eloquent,Php,Sql,Laravel,Eloquent,我有三张桌子——书、订单、物品 我将订单数据(订单id、用户id)保存在订单表中,而图书id保存在项目表中,因为用户可以添加多本图书 书 命令 项目 我试图显示订单详细信息和订单id下预订的书籍,但我对使用关系感到困惑。 由于所有数据都存储在订单表中,因此我能够成功显示订单详细信息。 但我无法显示订购的图书对应的订单ID 范本 模型订单 控制器 路线 我能够获取结果,但我不确定如何将结果隔离到订单id 如果我的数据库实现错误且不可扩展,我愿意接受建议 简言之,我正在尝试显示各个订单的书籍详细信息
如果投反对票,请务必说明原因。对于过去的几个问题,我被无缘无故地否决了。首先,您不需要再次查询
订单,因为您已经在上面的行中找到了它,即
$order_details = Orders::find($payment_orderid);
$order_products = Orders::find($payment_orderid)->items;
可以是:
$order_details = Orders::find($payment_orderid);
$order_products = $order_details->items;
其次,如果您想获得带有订单的书籍
,您可以在订单
模型上建立归属关系
关系,或者在项目
模型上建立拥有一个
关系(或两者兼而有之)
属于造口
将以下内容添加到您的订单
型号:
公共功能书()
{
返回$this->belongtomany(Books::class,“items”)
->withPivot('数量')
->带时间戳();
}
然后在控制器中,您可以执行以下操作:
$order_details = Orders::find($payment_orderid);
$books = $order_details->books; //Each book with have a `pivot` property than contains the quantity.
HasOne
在项目中
模型中,您可以添加以下内容:
公共功能书()
{
返回$this->hasOne(Books::class);
}
然后在控制器中,您可以使用来获取项目和书籍:
$order_details = Orders::with('items.book')->find($payment_orderid);
$order_products = $order_details->items;
在上述情况下,每个订单\u产品
上都有图书
属性,即
foreach ($order_products as $order_product) {
$order_product->book->name;
}
首先,您不需要再次查询订单
,因为您已经在上面的行中找到了它,即
$order_details = Orders::find($payment_orderid);
$order_products = Orders::find($payment_orderid)->items;
可以是:
$order_details = Orders::find($payment_orderid);
$order_products = $order_details->items;
其次,如果您想获得带有订单的书籍
,您可以在订单
模型上建立归属关系
关系,或者在项目
模型上建立拥有一个
关系(或两者兼而有之)
属于造口
将以下内容添加到您的订单
型号:
公共功能书()
{
返回$this->belongtomany(Books::class,“items”)
->withPivot('数量')
->带时间戳();
}
然后在控制器中,您可以执行以下操作:
$order_details = Orders::find($payment_orderid);
$books = $order_details->books; //Each book with have a `pivot` property than contains the quantity.
HasOne
在项目中
模型中,您可以添加以下内容:
公共功能书()
{
返回$this->hasOne(Books::class);
}
然后在控制器中,您可以使用来获取项目和书籍:
$order_details = Orders::with('items.book')->find($payment_orderid);
$order_products = $order_details->items;
在上述情况下,每个订单\u产品
上都有图书
属性,即
foreach ($order_products as $order_product) {
$order_product->book->name;
}
据我所知,您的items表是订单和书籍的透视表。所以你可以这样做:
订单模式
public function books()
{
return $this->belongsToMany('App\Book', 'items',
'order_id', 'book_id');
}
项目是数据透视表
在控制器中:
public function user_order_details($payment_orderid)
{
$order_details = Orders::find($payment_orderid);
foreach ($order_details->books as $product)
{
echo $product->name;
}
}
据我所知,您的items表是订单和书籍的透视表。所以你可以这样做:
订单模式
public function books()
{
return $this->belongsToMany('App\Book', 'items',
'order_id', 'book_id');
}
项目是数据透视表
在控制器中:
public function user_order_details($payment_orderid)
{
$order_details = Orders::find($payment_orderid);
foreach ($order_details->books as $product)
{
echo $product->name;
}
}
@Rwd我已将我的订单模型添加到问题中,您显示的3个表中的哪一个与OrderProducts
相关……或者它是一个单独的表?@Rwd很抱歉,我已向问题添加了更多详细信息,希望上面的编辑包含所有信息:)什么表是OrderProducts
模型??您已经显示了3个表书籍
,订单
,项目
…这是其中一个表还是您也有一个订单(产品
表?忘记重命名它了:(.OrderProducts表示项目table@Rwd我已将我的订单模型添加到问题中,您所显示的3个表中的哪一个表与OrderProducts
相关……或者它是一个单独的表?@Rwd很抱歉,我已为问题添加了更多详细信息,希望上面的编辑包含所有信息:)什么表是订购产品的<代码>模型??您已经显示了3个表<代码>书籍<代码>,<代码>订单<代码>,<代码>项目<代码>…是其中之一还是您也有一个<代码>订购产品<代码>表?忘记重命名了:(.OrderProducts代表Items Table非常感谢兄弟,解决方案运行了一段时间。我继续使用BelongToMany。我必须添加order\u id才能使解决方案运行到公共函数书(){return$this->BelongToMany(books::class,'order\u products','order\u id')->withPivot('quantity'))->withTimestamps();}我对laravel中的关系非常困惑。你能给我分享一下关于关系的教程吗:)@mightyteja这将是一个更好的教程:,但是,它确实需要订阅。非常感谢兄弟,花了一段时间才能使解决方案工作。我继续进行BelongToMany。我必须添加order_id以使解决方案能够工作公共函数书(){return$This->BelongToMany()(Books::class,'order_products','order_id')->withPivot('quantity')->withTimestamps();}我对laravel中的关系非常困惑。你能给我分享一下关于关系的教程吗:)@mightyteja这将是一个更好的教程:,但是,它确实需要订阅。