猿问

Laravel 多重数组

我有xml导出文件,我需要在其中多次循环数据,但不确定如何完成。

逻辑

  1. 循环产品

  2. 循环产品关系

  3. 将产品及其关系数据获取到变量中

  4. 导出包含产品信息及其关系的文件

代码

在我们开始编写代码之前,为了便于阅读,最好先提一下,我仅使用 1 个关系示例缩短了 xml 代码。如果它有效,那么我将自己处理其余的输入。(我只需要帮助修复 1 个变量,其余的我会做...)relationship part commented

截屏

解释

我需要的是从中获取'INVOICENO'值$product->allBarcodes->transits(它是数组/可能为空),然后在循环此关系之后获取截至tansNu的列值INVOICENO。


有任何想法吗?


更新

模型关系


Product.php


public function allBarcodes()

{

    return $this->hasMany(Barcode::class, 'product_id', 'id');

}

Barcode.php


public function product()

{

    return $this->belongsTo(Product::class);

}

public function transits()

{

    return $this->hasMany(Transit::class, 'barcode_id', 'id');

}

Transit.php


public function barcode()

{

    return $this->belongsTo(Barcode::class);

}


翻过高山走不出你
浏览 101回答 1
1回答

蝴蝶不菲

假设tansNu是一个字符串,您应该能够使用一些方便的集合方法tansNu检索from的数组。为此,您必须预先加载关系(在代码中)$product// in your $product loop you can get the tansNu list like so$invoiceNoCollection = collect([$product])->flatMap(function($p){        return $p->allBarcodes;    })->flatMap(function($b){        return $b->transits->pluck('tansNu');    });此时$invoiceNoCollection应该持有所有tansNu的$product。您没有指定您希望输出是什么样的,但我假设您希望它是唯一的,而不是 null,并且作为一个数组,您可以像这样实现$invoiceNoArray = $invoiceNoCollection->filter()->unique()->toArray();
随时随地看视频慕课网APP
我要回答