2017-01-20 3 views
1

Я работаю на API, я получаю данные формы из мобильного приложения, чтобы хранить его в таблице базы данных workers я хочу, чтобы изменить столбцы registration_id данных перед сохранением в базе данныхформа Манипулирование данных перед вставкой в ​​базу данных

в моем контроллере я храню, как этот

public function store() 
{ 
    Driver::create(input::all()); 

    return $this->respondCreated('Driver created successfully'); 
} 

в моей модели я пытаюсь изменить значение registration_id к чему-то

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Database\Eloquent\SoftDeletes; 

class Driver extends Model 
{ 
    use SoftDeletes; 

    protected $fillable = [ 
          'agent_id', 
          'registration_center', 
          'sponsor_name', 
          'event_name', 
          'registration_id', 
          ]; 

    protected $dates = ['deleted_at']; 

    public function modifyRegistrationId($registration_id) 
    { 
     $this->attributes['registration_id'] = 'test'; 
    } 
} 

Но это не работает оригинальная форма значение вставки в базу данных как я изменить registration_id к некоторому другому значению

смотрит вперед для столь необходимой помощи

спасибо

+0

Вы звоните в modifyRegistrationId() перед хранением в базе данных? –

ответ

1

Вы можете использовать событие, чтобы изменить любые данные перед сохранением. Взгляните на Laravel docs. Здесь мы используем boot() определения поведения обратного вызова:

class Driver extends Model 
{ 

    public static function boot() 
    { 
     parent::boot(); 

     self::creating(function($model){ 
      //before create, do this... 
      $lastRegistrationId = Driver::orderBy('id', 'desc')->first()->registration_id; 
      $this->registration_id = $lastRegistrationId.date('Y-m-d'); 
     }); 
    } 
    ... 
} 

Функции, канд использовать являются: создание, создание, обновление, обновление, сохранение, сохраняется, удаление, удаление, восстановление, восстановить

+0

я действительно ценю ваше время, не могли бы вы рассказать мне, как проверить последний 'registration_id', добавить к нему текущую дату и вставить в базу данных спасибо –

+0

Не знаете, что вы хотите здесь. registration_id будет типом INT. Если вы добавите текущую дату, измените ее на строку/varchar. Если вы попытаетесь сохранить, это приведет к ошибке. Что именно вы хотите сделать? –

+0

registration_id не 'INT' его строка, я просто хочу добавить текущую дату к ней –

1

Если вы будете всегда переопределить значение, define a mutator:

public function setRegistrationIdAttribute($value) 
{ 
    $this->attributes['registration_id'] = 'test'; 
} 

Если вы хотите сделать это только один раз, переопределить значение:

public function store(Request $request) 
{ 
    $request->registration_id = 'test'; 
    Driver::create($request->all()); 

    return $this->respondCreated('Driver created successfully'); 
} 
+0

@ Алексей Мезенин работает! Большое вам спасибо, я очень ценю это, можете ли вы рассказать мне, как проверить последний вставленный 'registration_id', прирастить его и добавить к нему текущую дату и вставить в базу данных спасибо –

+0

@MrRobot вы можете установить дату с тем же' $ request -> date = Carbon :: now() ', но для этого лучше использовать' created_at' Laravel. Чтобы получить идентификатор вставленной строки, сделайте это: $ id = Driver :: create ($ request-> all()) -> id; 'вместо' Driver :: create ($ request-> all()); ' –

Смежные вопросы