如何在 Laravel 中动态交叉连接?
How can I cross join dynamically in Laravel?
我想创建像这张图片一样的产品变体。
我已经尝试过使用静态数据。
$collection = collect(["XL", "XXL"]);
return $collection->crossJoin(["1kg", "2kg"], ["Red", "Green"]);
但我想动态创建它。我试过这种方法。
$collections = [];
foreach ($request->options as $key => $option) {
if($key == 0) continue;
array_push($collections, $option["option_values"]);
}
return $collection->crossJoin($collections);
它的return像这样image.That并不完全是我想要的。我发现问题是 $collections 是一个新数组和这个数组中的选项值。所以它是 return 这样的。但是我无法解决这个问题。
我已经添加了我的请求数据。
你走在正确的轨道上。在我看来,您需要类似的东西:
// all of my options
$options = [];
// Just store all options in the array
// I am going to assume $option["option_values"] is always an array
foreach ($request->options as $key => $option) {
array_push($options, $option["option_values"]);
}
// Get the first element so we can use collections
// and the crossJoin function
$start = array_shift($options);
return collect($start)->crossJoin(...$options);
(...$options)
类型分解数组中的所有元素并将它们设置为参数。
有些人可能会告诉你使用函数 call_user_func_array
,它允许你调用一个函数,它的参数作为一个数组,就像这样...
call_user_func_array('some_function', ['argument1', 'argument2']);
遗憾的是我从来没有使用过这个功能。如果有更有经验的人可以实现,我想知道如何实现。
我想创建像这张图片一样的产品变体。
我已经尝试过使用静态数据。
$collection = collect(["XL", "XXL"]);
return $collection->crossJoin(["1kg", "2kg"], ["Red", "Green"]);
但我想动态创建它。我试过这种方法。
$collections = [];
foreach ($request->options as $key => $option) {
if($key == 0) continue;
array_push($collections, $option["option_values"]);
}
return $collection->crossJoin($collections);
它的return像这样image.That并不完全是我想要的。我发现问题是 $collections 是一个新数组和这个数组中的选项值。所以它是 return 这样的。但是我无法解决这个问题。
我已经添加了我的请求数据。
你走在正确的轨道上。在我看来,您需要类似的东西:
// all of my options
$options = [];
// Just store all options in the array
// I am going to assume $option["option_values"] is always an array
foreach ($request->options as $key => $option) {
array_push($options, $option["option_values"]);
}
// Get the first element so we can use collections
// and the crossJoin function
$start = array_shift($options);
return collect($start)->crossJoin(...$options);
(...$options)
类型分解数组中的所有元素并将它们设置为参数。
有些人可能会告诉你使用函数 call_user_func_array
,它允许你调用一个函数,它的参数作为一个数组,就像这样...
call_user_func_array('some_function', ['argument1', 'argument2']);
遗憾的是我从来没有使用过这个功能。如果有更有经验的人可以实现,我想知道如何实现。