Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建为中间表的items表的雄辩关系_Php_Sql_Laravel_Eloquent - Fatal编程技术网

Php 创建为中间表的items表的雄辩关系

Php 创建为中间表的items表的雄辩关系,php,sql,laravel,eloquent,Php,Sql,Laravel,Eloquent,我有三张桌子——书、订单、物品 我将订单数据(订单id、用户id)保存在订单表中,而图书id保存在项目表中,因为用户可以添加多本图书 书 命令 项目 我试图显示订单详细信息和订单id下预订的书籍,但我对使用关系感到困惑。 由于所有数据都存储在订单表中,因此我能够成功显示订单详细信息。 但我无法显示订购的图书对应的订单ID 范本 模型订单 控制器 路线 我能够获取结果,但我不确定如何将结果隔离到订单id 如果我的数据库实现错误且不可扩展,我愿意接受建议 简言之,我正在尝试显示各个订单的书籍详细信息

我有三张桌子——书、订单、物品

我将订单数据(订单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这将是一个更好的教程:,但是,它确实需要订阅。