将表单字段映射到具有不同名称的雄辩模型

时间:2018-01-21 15:25:36

标签: laravel-5 eloquent

我想知道如何将表单字段映射到雄辩的模型。事实是表单输入字段的名称不同于雄辩的模型。

这就是我的

模型

class Message extends Model
{
    protected $fillable = [
        'name', 'email', 'subject_id',
    ];
}

表格

<form action="{{ action('MessageController@store') }}" method="post">
<input id="name" name="name" type="text">
<input id="email" name="email" type="text">
<select id="subject" name="subject">
    @foreach ($subjects as $subject)
        <option value="{{ $subject->id }}">{{ $subject->title}}</option>
    @endforeach
</select>
</form>

控制器

public function store(Request $request)
{
    $message = $this->validate(request(), [
        'name' => 'required',
        'email' => 'required',
        'subject' => 'required',
    ]);

    Message::create($message);
}

请注意,表单选择字段名称为subject,邮件模型字段为subject_id

是否可以在Message模型中映射这两个字段? 我想在控制器中有可能像

那样
Message::create([
    'name' => $request->input('name');
    'email' => $request->input('email');
    'subject_id' => $request->input('subject');
]);

但那不是我想要的。

我不希望有一些代码改进或建议,因为我是完整的Laravel noob:)

1 个答案:

答案 0 :(得分:0)

您可以在Message模型上添加mutator。

public function setSubjectAttribute($value) {
      $this->attributes['subject_id'] = $value;
}

这基本上告诉了eloquent模型上有subject属性,但是你需要修改subject_id