Попытка исправить проблемы PHPStan с отношениями MorphTo и свойствами модели LaravelPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Попытка исправить проблемы PHPStan с отношениями MorphTo и свойствами модели Laravel

Сообщение Anonymous »

Недавно мы начали использовать PHPStan 1.10 на уровне 6 в проекте Laravel 10 PHP 8.2.
Он сообщает о нескольких оставшихся проблемах в следующей модели, которые я хотел бы исправить.
< pre class="lang-php Prettyprint-override">

Код: Выделить всё

class ArticlePrice extends Model
{

protected $fillable = ['cost_type_id', 'type', 'type_id', 'amount'];

/**
* @var array $with
*/
protected $with = ['types'];

/**
* @return MorphTo
*/
public function types(): MorphTo
{
return $this->morphTo('types', 'type', 'type_id');
}

/**
* @return string
*/
public function getName(): string
{
if ($this->types) {
return $this->type === Article::class ? $this->types->vdm_code : $this->types->name;
}

return '';
}
}
Для типов() MorphTo сообщает:

Код: Выделить всё

phpstan: Method App\Models\Environment\CostType\ArticlePrice::types()
return type with generic class Illuminate\Database\Eloquent\Relations\MorphTo
does not specify its types: TRelatedModel, TChildModel
Но если я изменю его на MorphTo, который отражает фактические модели, которые он мог бы вернуть в этот момент, он будет жаловаться:

Код: Выделить всё

phpstan: Method App\Models\Environment\CostType\ArticlePrice::types() should return
Illuminate\Database\Eloquent\Relations\MorphTo
but returns Illuminate\Database\Eloquent\Relations\MorphTo.
что для меня странно, поскольку мы находимся в ArticlePrice, мне это кажется бессмысленным.
Когда я делаю вместо этого.
Другая проблема заключается в том, что он не понимает содержимое $types:

Код: Выделить всё

phpstan: Access to an undefined property Illuminate\Database\Eloquent\Model::$name.
phpstan: Access to an undefined property Illuminate\Database\Eloquent\Model::$vdm_code.
Я надеялся, что исправление проблемы morphTo решит и эту проблему, поскольку vdm_code и name являются документированными свойствами их моделей. Но я боюсь, что это не сработает, поэтому может потребоваться другой способ решения проблемы.
Короче, как мне заставить PHPStan понять, как работает мое полиморфное отношение, и как мне заставить его распознавать свойства связанных с полиморфизмом моделей?

Подробнее здесь: https://stackoverflow.com/questions/778 ... l-properti
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»