PHP:为数据库格式化多个数组(laravel)

时间:2012-11-20 14:36:07

标签: php laravel

我有这样的输入形式:(使用Laravel的刀片模板引擎,但html应该很容易理解,最终是微不足道的)

{{ Form::text('amount[]', Input::old('amount')) }}
<?php echo Form::select('unit[]',
    array(
    'whole' => _('whole'),
    'ml'    => _('milliliter'),
    'l'     => _('liter'),
    'dl'    => _('deciliter'),
    'mg'    => _('milligram'),
    'g'     => _('gram'),
    'kg'    => _('kilogram'),
    'tsp'   => _('teaspoon'),
    'tbs'   => _('tablespoon'),
    )) ?>
{{ Form::text('ingredient[]', Input::old('ingredient')) }}

我正在尝试将其格式化为我的数据库以将其返回到以下字符串中:

<li><span>1</span> liter red wine</li>

我正在考虑将它变成一个更简单的形式并取消单位测量,迫使我的用户输入它而不是灵活性,但我仍然需要将它全部压缩到我的数据库的一个表中。 span标记在jQuery中用于动态增加数量,因此需要。我已经在这里休息了很多天,但我无法破解如何做到这一点。

这是我的格式化逻辑:

$amount = Input::get('amount[]');
$unit = Input::get('unit[]');
$ingredient = Input::get('ingredient[]');

for ( $i = 0, $c = count(Input::get('ingredient[]')); $i < $c; $i++ ) 
{
    $ingredients .= '<li><span>'.$amount[$i].'</span>'.$unit[$i].' '.$ingredient[$i].'</li>';
}

我用

发送
$new = Recipe::create(array(
    'title' => Input::get('title'),
    'curiousity' => Input::get('curiousity'),
    'ingredients' => $ingredients,
    'steps' => Input::get('recipe')
));

我尝试了很多方法,我得到的错误就像没有定义$ ingredients数组或者无法在变量中使用[]。我尝试将变量定义为'$ ingredients ='';'变量,但只产生一个空字符串。我的问题必须在逻辑中。

1 个答案:

答案 0 :(得分:3)

为简洁起见,在表单之外构建您的选择列表以及(无论如何我要做的是保持控制器非常纤薄)一次性将输入发送到模型。

$input = Input::all();
$new = Recipe::create($input);

为其他地方的成分构建阵列。在模型中(也许?):

$ingredients = array(
'dbname1' => 'displayname1',
'dbname2' => 'displayname2'
);

并相应地显示它,然后表单输入应该使用数组中的$ input发送,您可以解析然后保存到数据库。

有关Blade语法的其他说明。我不知道需要定义数组括号[]。

{{Form::open()}}
{{Form::label('label1','Display Label 1')}}
{{Form::text('fieldname1',Input::old('fieldname1'))}}

已经构建了您的成分数组(您当前的语法将生成一个下拉列表,我假设您需要复选框)

{{Form::select('ingredientsFIELDNAME',$ingredients)}}
{{Form::close()}}

在您的Input :: all()数组中,如果您将其构建为复选框而不是选择,则componentsFIELDNAME字段名称将具有数组。希望这一切都有意义。