如何在laravel中从多对多关系中检索多个记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在laravel中从多对多关系中检索多个记录相关的知识,希望对你有一定的参考价值。

在此先感谢,我有从多对多关系中检索数据的问题,我有订单,每个订单都有很多产品,而且我正在分析当今订单中销售的产品数量,但是当我打电话时1个订单ID出现错误,表示关系方法不存在。 订单型号:

 class orders extends Model {
  protected $table = 'orders';
  public $timestamps = false;
  protected $fillable = [
    'serial', 'clientName', 'phone', 'cost', 'notes', 'received_by', 'received_at'
  ];
  public function product() {
    return $this->belongsToMany('\App\Products', 'order_product', 'order_id', 'product_id')->withPivot('product_id', 'count');
  }
}

产品型号:

class Products extends Model {
  protected $table = 'products';
  public $timestamps = false;
  protected $fillable = [
    'name', 'cost', 'available', 'notes', 'created_at'
  ];
  public function order() {
    return $this->belongsToMany('\App\Orders', 'order_product', 'product_id', 'order_id')->withPivot('order_id', 'product_id', 'count');
  }
}

这是控制器

$today_orders = Orders::where('received_at', '>=', Carbon::today()->startOfDay())->where('received_at', '<=', Carbon::today()->endOfDay());
$today_orders_ids = array();
foreach($today_orders->get() as $order) {
   array_push($today_orders_ids, $order->id);
}
$today_orders_products = Orders::find($today_orders_ids)->product()->get();

错误信息:

BadMethodCallException
Method product does not exist.

我的代码中有错误吗?或者我无法从关系中获得多条记录 注意:

一切都完美无缺,直到find()方法,关系和检索今天的订单

答案

用以下方法替换控制器中的第2-5行:

$today_orders = $today_orders->with('product')->get();
$today_orders_products = $today_orders->pluck('product')->collapse();

以上是关于如何在laravel中从多对多关系中检索多个记录的主要内容,如果未能解决你的问题,请参考以下文章

如何从多对多关系中只加载 1 个结果 Laravel

使用 laravel 从多对多检索数据

从多对多关系的桥接表中检索数据的查询[关闭]

从多对多连接表中检索行的 HQL 查询

如何从多对多表中选择一对一关系

如何在多对多关系 Laravel 中检索所有相关模型?