遍历Yajra DataTable中的元素(Laravel)

4
我试图在我的数据表中放置一个foreach循环,但它无法工作。 顺便说一句,如果我删除foreach,一切都已经正常工作了。 以下是我的代码:
$Product = Product::query();
$colors   = Color::all();

return Datatables::eloquent($Product)

    ->addColumn('category_name', function($row) {

        $category = Category::select('name')->where('id', $row->category_id )->pluck('name')->toArray();
        return $category;

    })

    ->addColumn('add_color', function($row) {

        $return = 
            '<form class="form-inline" method="post" action="/procurement/add-product" style="max-width: 170px;">
            <input type="hidden" name= "product_id" value="' . $row->id . '">

            <div class="form-group">
            <select name="color_id" class="form-control" required autofocus>
                    '.foreach ($colors as $color){.' 
                    <option value="test">test</option>'.}.'
            </select>
            </div>';

        return $return;

});
2个回答

5

这不行,你将一个 foreach 放到了一个 string 中去。

你可以先执行 foreach 来准备好要附加在该字符串中的项目。

例如:

<option>something</option>
<option>something more</option>

在设置$return之前,执行foreach:
->addColumn('add_color', function($row) {

    $options = ''
    // here we prepare the options
    foreach ($colors as $color) {
        $options .= '<option value="test">$color</option>';
    }

    $return = 
       '<form class="form-inline" method="post" action="/procurement/add product" style="max-width: 170px;">
        <input type="hidden" name= "product_id" value="'.$row->id.'">

        <div class="form-group">
            <select name="color_id" class="form-control" required autofocus>' . $options . '</select>
        </div>';

    return $return;

})

选项变量不会无用吗?因为你每次循环都会替换它。 - radren
1
@radren 我使用的是 .= 而不是 = - Wreigh
啊,抱歉我没看到点号。 - radren

4

您需要在返回之前执行foreach循环。然后您也不需要在数据表中使用use或导入$color变量。可以像这样做:

$Product = Product::query();
$colors   = Color::all();

return Datatables::eloquent($Product)

->addColumn('category_name', function($row) {

    $category = Category::select('name')->where('id', $row->category_id )->pluck('name')->toArray();
    return $category;

})

->addColumn('add_color', function($row) use ($colors)  {
        $options = '';
        foreach ($colors as $color) {
            $options .= '<option value="test">$color</option>';
        }

    $return = 
        '<form class="form-inline" method="post" action="/procurement/add-product" style="max-width: 170px;">
        <input type="hidden" name= "product_id" value="' . $row->id . '">

        <div class="form-group">
        <select name="color_id" class="form-control" required autofocus>
        </select>
        </div>';

    return $return;

});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接