При использовании Laravel 5.1 я пытаюсь проверить каждое значение до его сохранения в базе данных с помощью Eloquent ORM. Моя логика заключается в том, что сначала выровняйте значение, если значение представляет собой пустую строку ""
, а затем преобразует ее в null
вместо пустой строки.
Мне было рекомендовано создать Trait, который будет переопределять метод setAttribute для этого.
Итак, вот что я сделал
У меня есть новая папка «app \ Traits» внутри файла TrimScalarValues.php
который содержит следующий код
<?php namespace App\Traits; trait TrimScalarValues { public function setAttribute($key, $value) { if (is_scalar($value)) { $value = $this->emptyStringToNull(trim($value)); } return $this->setAttribute($key, $value); } /** * return null value if the string is empty otherwise it returns what every the value is * */ private function emptyStringToNull($string) { //trim every value $string = trim($string); if ($string === ''){ return null; } return $string; } }
Наконец, у меня есть файл app\Models\Account.php
который содержит следующий код
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use App\Models\industry; use App\Traits\RecordSignature; use App\Traits\TrimScalarValues; class Account extends Model { use RecordSignature, TrimScalarValues; /** * The database table used by the model. * * @var string */ protected $table = 'accounts'; protected $primaryKey = 'account_id'; const CREATED_AT = 'created_on'; const UPDATED_AT = 'modified_on'; const REMOVED_AT = 'purged_on'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = ['client_id','account_name', 'company_code', 'legal_name', 'created_by','modified_by','instrucations']; /** * The attributes excluded from the model's JSON form. * * @var array */ //protected $hidden = ['account_id', 'remember_token']; protected $guarded = ['account_id']; /** * Get the industry record associated with the account. */ public function industry() { return $this->hasOne(industry, industry::primaryKey); } public function pk(){ return $this->primaryKey; } }
Но каждый раз, когда я обновляю значение, я получаю белую страницу без ошибок или журналов.
Когда я use RecordSignature, TrimScalarValues;
app\Models\Account.php
и меняю use RecordSignature, TrimScalarValues;
use RecordSignature;
то я не получаю белую страницу, но, очевидно, значения не обрезаются и не преобразуются в нуль.
Что я здесь делаю неправильно?