Ill есть проблема, потому что мои мутаторов никогда не дозвонились, когда больные Использовать конструктор:Laravel Мутаторы с конструктором?
Как это:
function __construct() {
$this->attributes['guid'] = Uuid::generate(4)->string;
}
public function setDateAttribute($date) {
dd($date); // Never gets called
}
Ill уже выяснил, что мутаторы п будет называться, когда плохо Используйте конструктор, поэтому я должен использовать:
public function __construct(array $attributes = array()){
parent::__construct($attributes);
$this->attributes['guid'] = Uuid::generate(4)->string;
}
public function setDateAttribute($date) {
dd($date); // now its getting called
}
Но так плохо получить следующее сообщение об ошибке:
array_key_exists() expects parameter 2 to be array, null given
Но я не знаю, где? Может ли кто-нибудь помочь мне узнать, как создать значение по умолчанию (например, UUID) для определенного столбца и использовать мутаторы в одном классе?
Edit: Спасибо Martin Bean за вашу помощь, но я теперь получаю следующее сообщение об ошибке:
Cannot declare class App\Uuid because the name is already in use
Я пробовал:
Создание файла под названием "Uuid.php" в/приложение/-> /app/Uuid.php
С этим содержанием:
<?php namespace App;
use Webpatser\Uuid\Uuid;
trait Uuid
{
public static function bootUuid()
{
static::creating(function ($model) {
$model->uuid = Uuid::generate(4)->string();
});
}
}
изменил мою модель на:
<?php namespace App;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
class Task extends Model {
use \App\Uuid;
Большое спасибо!
Edit 2:
Ill пробовал так:
class Task extends Model {
protected $table = 'tasks';
protected $fillable = ['..... 'date', 'guid'];
public function setGuidAttribute($first=false){
if($first) $this->attributes['guid'] = Uuid::generate(4)->string;
}
TaskController:
public function store() {
$input = Request::all();
$input['guid'] = true;
Task::create($input);
return redirect('/');
}
работает отлично, но когда заболел использование:
public function setDateAttribute(){
$this->attributes['date'] = date('Y-m-d', $date);
}
В Task.php больной получает:
Undefined variable: date
Пожалуйста, почему вы должны использовать конструкцию? Что вы пытаетесь архивировать? – Digitlimit
Я хотел бы установить UUID в конкретный столбец для каждого нового объекта – derdida
Тогда вам не нужен конструктор для этого – Digitlimit