При использовании 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;
}
}
Но каждый раз, когда я обновляю значение, я получаю белую страницу без ошибок или журналов.
Когда я изменяю app\Models\Account.php
и меняю use RecordSignature, TrimScalarValues;
на use RecordSignature;
, я не получаю белую страницу, но, очевидно, значения не обрезаются и не преобразуются в нуль.
Что я здесь делаю неправильно?