2015-08-07 2 views
0

Мне нужно создать ключ для каждой новой вставки в красноречивой модели (не может быть нулевой). Этот ключ не должен находиться в массиве $fillable, потому что он не должен быть назначен или изменен вообще. Я попробовал это в модели:Создание строки в стиле Laravel

public static function boot() 
{ 
    static::creating(function ($object) { 
     $object->key = md5(uniqid("CT", true)); 
    }); 
} 

но это, кажется, не работает, как я получаю исключение, говоря

SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column 'key'...

+0

Что такое модальный вид? –

ответ

1

Вы могли бы попытаться создать новый экземпляр объекта в контроллере и то Ассинг значение, которое нужно вручную, в NEX примере я указать идентификатор пользователя билета за пределами массового назначения

модель, которую я использую выглядит следующим образом

class TicketComment extends Entity 
{ 
    protected $fillable = ['comment', 'link']; 

    /** 
    * Return the ticket of the given comment. 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
    */ 
    public function ticket() 
    { 
     return $this->belongsTo(Ticket::getClass()); 
    } 

    /** 
    * Return the user of the given comment. 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
    */ 
    public function user() 
    { 
     return $this->belongsTo(User::getClass()); 
    } 
} 

И это метод, который сохраняет свой комментарий, обратите внимание, как я добавил идентификатор пользователя

public function submit($id, Request $request, Guard $auth) 
{ 
    $this->validate($request, [ 
     'comment' => 'required|max:250', 
     'link' => 'url' 
    ]); 

    $comment = new TicketComment($request->all()); 
    $comment->user_id = $auth->id(); 

    $ticket = Ticket::findOrFail($id); 
    $ticket->comments()->save($comment); 

    session()->flash('success', 'Your comment has been saved successfully'); 
    return redirect()->back(); 
} 
0

Там вы идете

App\Test.php модель

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Test extends Model 
{ 
    protected $table = 'test'; 
    protected $primaryKey = 'id'; 
    protected $fillable = []; 

    public $incrementing = false; 

    public function getNewId() 
    { 
     return md5(uniqid("CT", true)); 
    } 

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

     static::creating(function ($model) { 
      $model->{$model->getKeyName()} = $model->getNewId(); 
     }); 
    } 
} 

миграции для test таблицы

class CreateTestTable extends Migration 
{ 
    public function up() 
    { 
     Schema::create('test', function (Blueprint $table) { 
      $table->string('id'); 
      $table->timestamps(); 

      $table->primary('id'); 
     }); 
    } 

    public function down() 
    { 
     Schema::drop('test'); 
    } 
} 

Давайте проверим его с помощью tinker

 
>>> $a = App\Test::create([]); 
=> { 
     id: "afedc2972f980d20ca95b556a93c0db1", 
     updated_at: "2015-08-07 15:24:24", 
     created_at: "2015-08-07 15:24:24" 
    } 
>>> 
Смежные вопросы