Признак модели, вызывающий ошибку SQL при вставке - PullRequest
0 голосов
/ 06 августа 2020

У меня есть модель приложения, использующая черту. Мне нужна черта, чтобы получать данные и использовать их в функции доступа.

Модель содержимого:

use App\Traits\ArchiveTrait;

class Content extends Model
{
    use ArchiveTrait;
    protected $fillable = ['title','details'];
    protected $table = 'contents';

    public function getFileName($file_name)
    {
        return $this->archiving->url.'/media/contents/'.$file_name;
    }
}

Архивная черта

trait ArchiveTrait {
    private $app_id;
    private $archiving;

    public function __construct()
    {
        $this->app_id = config('archiving.id');
        $this->archiving = Application::findOrFail($this->app_id);
    }

    public function guzzleClient() {
        $headers = [
            'Content-Type' => 'application/json',
            'X-Requested-With' => 'XMLHttpRequest',
            'Authorization' => 'Bearer ' . $this->archiving->token,
        ];

        $client = new \GuzzleHttp\Client([
            'headers' => $headers,
            'http_errors' => false
        ]);

        return $client;
     }
}

Тогда проблема в том, когда Я пытаюсь вставить новый контент, я получаю заголовок « Поле», а «подробности» не имеют значения по умолчанию '* ошибка SQL, но если я удалю «использовать ArchiveTrait» и getFileName функция от модели, то она работает нормально. Думаю, с этой чертой что-то не так.

1 Ответ

0 голосов
/ 06 августа 2020

Laravel Яркие модели получают свои атрибуты через конструктор. Поскольку вы переопределяете конструктор и ничего не передаете родительскому конструктору, атрибуты вашей модели никогда не устанавливаются.

Вы не должны добавлять конструктор в трейт, но если вам это действительно нужно, вы можете исправьте это, передав переменную $attributes родительскому конструктору:

public function __construct($attributes = [])
{
    parent::__construct($attributes);

    $this->app_id = config('archiving.id');
    $this->archiving = Application::findOrFail($this->app_id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...