@Kerm

Laravel 10, почему в контроллере параметр модели возвращает данные, а в самой модели тот же параметр возвращает null?

В контроллере:

$entry = File::find($id);
// $entry->id возвращает 216

$entry->readFileInfo()


В модели:

class File extends Model
{
    use HasFactory;

    protected $table = 'files';

    protected $fillable = [
        'ticket_id',
        'user_id',
        'name',
        'file',
    ];

    protected $hidden = ['created_at', 'updated_at', 'deleted_at'];

    /**
     * @OA\Property(title="id",description="id",format="bigint20",example=1)
     */
    protected ?int $id = null;

    public function readFileInfo(): array
    {
       //$this->id возвращает null
    }
}


Я даже прямо в аргументах функции readFileInfo передавал из контроллера объект $entry и внутри readFileInfo мне $entry->id возвращал null, хотя в контроллере возвращается число. Почему в контроллере все работает и есть доступ ко всем параметрам объекта, а в модели они все возвращают null, хотя если посмотреть что внутри объекта там все есть, в плане полученные из бд данные.

Только если сделать $file = $this->toArray() я получаю нужное число в $file['id']

===========UPDATE
По комментарию к задаче я понял что это из-за добавленных свойств в классе:

protected ?int $id = null;

Если это свойства убрать то все ок, но тогда вызовы в коде $this->id, $this->name подсвечиваются с сообщением "Property accessed via magic method" в шторме и самое обращение к этим переменным становится не явным, не распечатав объект становится не возможным для понимания какие вообще свойства есть объекта есть, это не удобно.

Как оставить свойства, но и чтобы работало обращение к ним внутри самой модели?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
yesbro
@yesbro
Думаю, помогаю думать
1) Убираешь из модели protected ?int $id = null;

2) Далее что можно сделать что бы шторм не подсвечивал.

2.1) Ставишь плагин для шторма Laravel Idea https://laravel-idea.com/ , самый лучший вариант,.

2.2) Ставишь пакет IDE Helper Generator for Laravel https://github.com/barryvdh/laravel-ide-helper который будет генерировать файл подсказок для шторма

2.3) Сам руками прописываешь свойства модели в док блок.

/**
 * @property int|null $id
 */
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
JhaoDa
@JhaoDa
LaravelRUS Team
Потому что это разные id. Зачем ты вообще объявил в модели свойство? Чтобы было куда аннотации вешать?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы