Warm tip: This article is reproduced from serverfault.com, please click

php-在Laravel中输入文字时如何附加?

(php - How to attach when enter a text in laravel?)

发布于 2020-11-28 00:11:23

登录用户后,用户输入此技能表格,选择技能。

技能

用户可以输入多种技能,然后保存在数据库中。

名称字段

  • 技能名称
  • 等级

并在桌子上

  • 技能名称
  • 等级
  • 用户身份

我不知道skillsandskill_user表是否应该,我不知道。

如果你是我,你会怎么做?

你能告诉我最干净的编码吗?

public function up()
{
    Schema::create('skills', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->string('skill_name');
        $table->smallInteger('level');
        $table->timestamps();
    });

    Schema::create('skill_user', function (Blueprint $table) {
        $table->bigInteger('skill_id')->unsigned()->nullable();
        $table->foreign('skill_id')->references('id')->on('skills')->onDelete('cascade');
        $table->bigInteger('user_id')->unsigned()->nullable();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->unique(['skill_id' , 'user_id']);
    });
}

showDynamicExperimental();
function showDynamicExperimental()
{
    let html = '' +
        '@foreach(auth()->user()->skills as $skill)\n'+
        '<div class="col-md-6 position-relative">\n' +
        '<i class="fas fa-times text-danger position-absolute"></i>' +
        '<div class="row">\n' +
        '<div class="col-md-8">\n' +
        '<div class="form-group">\n' +
        '<label for="skill_name">skill_name</label>\n' +
        '<input type="text" id="skill_name" name="skill_name[]" class="form-control" value="{{ $skill->skill_name }}">\n' +
        '</div>\n' +
        '</div>\n' +
        '<div class="col-md-4">\n' +
        '<div class="form-group">\n' +
        '<label for="level">level</label>\n' +
        '<select class="form-control" id="level" name="level[]">\n' +
        '<option value="1" {{ $skill->level == 1 ? 'selected' : '' }}>★☆☆☆☆</option>\n'+
        '<option value="2" {{ $skill->level == 2 ? 'selected' : '' }}>★★☆☆☆</option>\n'+
        '<option value="3" {{ $skill->level == 3 ? 'selected' : '' }}>★★★☆☆</option>\n'+
        '<option value="4" {{ $skill->level == 4 ? 'selected' : '' }}>★★★★☆</option>\n'+
        '<option value="5" {{ $skill->level == 5 ? 'selected' : '' }}>★★★★★</option>\n'+
        '</select>\n'+
        '</div>\n' +
        '</div>\n' +
        '</div>\n' +
        '</div>\n ' +
        '@endforeach';
    $('#showExperimental').append(html);
}

控制器

$user->skills()->detach();

if ($request->skill_name) {
    foreach ($request->skill_name as $key => $value) {
        $user->skills()->attach($value, [
            'user_id' => auth()->id(),
            'level' => $request->level[$key],
        ]);
    }
}

User.php

public function skills()
{
    return $this->belongsToMany(Skill::class)->withPivot('skill_name');
}

我得到这个错误。

错误

Questioner
irankhostravi
Viewed
1
Phil 2020-11-28 08:59:27

表格中似乎没有一levelskill_user

我认为skill表格应该只存储ID和技能名称。然后,你在中添加该level列,skill_user并使用skill_idlevel跟踪用户级别。