【问题标题】:Laravel 5.2 Eloquent foreach loopLaravel 5.2 雄辩的 foreach 循环
【发布时间】:2017-06-26 13:30:08
【问题描述】:

我在 Laravel 5.2 的控制器中,并试图遍历一个有说服力的 invoice_items 集合,这将转化为类似订单项目的东西。因此,发票将充当订单,具有订购的商品 (invoice_item),而 invoice_items 将列出订购的所有产品 (product)。

这是我所拥有的:

$id = $value; //from param
$invoice = Invoice::where('id', $id)->get();
$invoice_items = Invoice_item::all()->where('invoice_id', $invoice[0]->id);

$contact = Contact::where('id', $invoice[0]->contact_id)->get();

foreach($invoice_items as $item) {
    $products = Product::all()->where('id', $item->product_id);
}

我正在尝试从该特定发票中提取所有产品(通过发票项目),在这种特定情况下应该是两个不同的产品。

发生的情况是,当我使用该循环进行迭代时,它会添加两次相同的产品,而应该将每个产品添加一次。我的逻辑在这里错了吗?或者我需要重新审视我的人际关系吗?

【问题讨论】:

  • 在使用where() 时尝试get() 而不是all()
  • 不幸的是, get() 给出了相同的输出。不过,感谢您的快速回复!

标签: php eloquent laravel-5.2


【解决方案1】:

将您的查询更改为:

$invoice = Invoice::where('id', $id)->get();
$invoice_items = Invoice_item::where('invoice_id', $invoice[0]->id)->get();

$contact = Contact::where('id', $invoice[0]->contact_id)->get();

foreach($invoice_items as $item) {
    $products = Product::where('id', $item->product_id)->get();
}

一种更简单的方法可能是将项目关系添加到 InvoiceItems 模型。例如:

public function items()
{
  $this->hasOne('Items');
}

然后您可以使用以下方法从 Invoice_item 获取所有项目:

return $invoice_items->items;

你也可以试试:

$invoice = Invoice::where('id', $id)->get();
$invoice_items = Invoice_item::where('invoice_id', $invoice[0]->id)->get()->lists('product_id');

$contact = Contact::where('id', $invoice[0]->contact_id)->get();

$products = Product::whereIn('id', $invoice_items)->get();

希望$products 将包含该发票的产品集合。不需要 foreach 循环。

【讨论】:

  • 感谢您的反馈——当我有机会看看是否可行时,我将尝试其他关系。但是,在 foreach 循环中更改查询仍然不起作用。实际发生的情况是,查询仅在循环中拉出一个产品。因此,$products 对象仅保存最后一个产品,或从第二次迭代中提取的产品。我认为唯一合乎逻辑的做法是将其推入数组中。为了简单起见,我只是想不断地使用一个对象。
  • 我已经用另一个你可以尝试的例子更新了我的答案,而不需要 foreach 循环。告诉我进展如何。
  • 效果很好!我创建了一个临时 invoice_items 变量,只是因为我仍然需要完全访问视图中的这些对象,但是在现在的临时文件上使用 ->lists() 方法效果很好。耶!不需要数组。再次感谢!
猜你喜欢
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 2016-11-03
  • 1970-01-01
相关资源
最近更新 更多