Skip to content

Problem with relations #25

Open
@b1rdex

Description

@b1rdex

Code in the controller:

        /**
         * @var Transfer|null $transfer
         */
        $transfer = Transfer::find()->one();
        if (!$transfer) {
            return;
        }
        $paymentsTransfers = $transfer->getPaymentTransfer()->all();

Model:

class Transfer extends \yii\db\ActiveRecord
{
    /**
     * @return \yii\db\ActiveQuery
     */
    public function getPaymentTransfer()
    {
        return $this->hasMany(PaymentTransfer::class, ['transfer_id' => 'id']);
    }
}

getPaymentTransfer() method return type provided in PhpDoc or using native return type set to ActiveQuery leads to extension exception: Internal error: Unexpected type PHPStan\Type\ObjectType during method call all at line 142 (line 142 is $transfer->getPaymentTransfer()->all() call). That error comes from \Proget\PHPStan\Yii2\Type\ActiveQueryDynamicMethodReturnTypeExtension::getTypeFromMethodCall. Here is what's in the $calledOnType:

object(PHPStan\Type\ObjectType)#9382 (3) {
  ["className":"PHPStan\Type\ObjectType":private]=>
  string(18) "yii\db\ActiveQuery"
  ["subtractedType":"PHPStan\Type\ObjectType":private]=>
  NULL
  ["genericObjectType":"PHPStan\Type\ObjectType":private]=>
  NULL
}

If I remove return type from getPaymentTransfer() everything works fine. But that looks odd and that's easy to break if someone adds return type.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions