将JS数组提交给Eloquent控制器

时间:2017-05-21 21:21:55

标签: javascript php mysql laravel

我发现很难找到有关如何构建Eloquent函数以将数据存储到MySQL数据库的文档。

目前,我可以通过从表单字段中获取值将变量引入MySQL数据库:

$new_character->character_name = request('characterName');

characterName是表单字段的ID。

但是我想要将变量引入新的数据库行。我该怎么做?

我尝试使用jquery将数组分配给表单:

<input type="text" class="form-control" id="skillsField">
skillsVar = skillsList.toString(); // skillsVar is an array of strings
$('#skillsField').val(skillsVar);

然后在Eloquent模型中:

$new_character->Trained_Skills = request('skillsField');

但这只会导致 null 被提交给数据库。

对这个问题的帮助表示赞赏,并指出了一个简单解释Laravel中DB CRUD的文档!

模特&amp;控制器: https://pastebin.com/qVVxG3aF

查看: https://pastebin.com/Ef7b1uPp

查看很长,相关的代码行是: 502 - 503:我试图用来保存变量的表单 559 - 581:单击按钮时运行的JS代码,将所有勾选的复选框值放入数组中,将其转换为字符串并将其分配给变量。

2 个答案:

答案 0 :(得分:0)

尝试将输入更改为:

<input type="text" class="form-control" name="skillsField" id="skillsField">

答案 1 :(得分:0)

查看代码时,您的模型本身看起来不完整,缺乏表格结构和定义。

我根据你的视图和控制器做了一些假设,以确定模型应该看起来像什么。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Character extends Model
{

    protected $table = 'characters'

    public $timestamps = false;

    protected $fillable = [
        'player_id',
        'campaign_id',
        'character_name',
        'Race',
        'Class',
        'Level',
        'Strength',
        'Dexterity',
        'Constitution',
        'Intelligence',
        'Wisdom',
        'Charisma',
        'Proficiency',
        'Trained_Skills',
        'Languages',
        'Hit_Die',
        'HP'
    ];

    // If you have a specific id field as a primary key use this:
    protected $guarded = ['id'];

    public static function userChars()
    {
        return static::where('player_id', '=', \Auth::user()->id)->get();
    }

}

然后你的控制器看起来很好,只要它创建字符并根据传入的请求对象分配值。

在您的视图中,对于您用于插入技能var值和语言var值的两个字段,请确保包含“name”,因为这是在传递请求对象时用于引用的内容:

<input type="text" class="form-control" id="skillsField" name="skillsField">
<input type="text" class="form-control" id="languagesField" name="languagesField">

最后,在控制器端进行测试时,我建议在请求对象上执行 var_dump ,或者至少在请求('skillsField')上执行 var_dump request('languagesField')以确保请求对象在尝试写入数据库表本身之前实际包含您期望的值。