Skip to content

Generates nullable columns incorrectly for HasMany relation #17

@roquie

Description

@roquie

PHP version: 8.0
Package version: v1.0.10

How to reproduce:

  1. User entity:
<?php

declare(strict_types=1);

namespace App\Database;

use App\Database\Typecast\Uuid;
use App\Exception;
use App\Repository;
use App\Database\Column;
use Cycle\Annotated\Annotation as Cycle;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;

#[Cycle\Entity(
    repository: Repository\User::class
)]
class User
{
    use Column\Id;

    #[Cycle\Column(type: 'string(64)')]
    public string $username;

    #[Cycle\Relation\HasMany(target: Comment::class)]
    private Collection $comments;

    public function __construct(Uuid $id, string $username, string $password)
    {
        $this->id = $id;
        $this->username = $username;
        $this->comments = new ArrayCollection();
    }

    public function getComments(): Collection
    {
        return $this->comments;
    }
}
  1. Comment entity
<?php

declare(strict_types=1);

namespace App\Database;

use App\Repository;
use App\Database\Column;
use Cycle\Annotated\Annotation as Cycle;

#[Cycle\Entity(
    repository: Repository\Comment::class
)]
class AuthCode
{
    use Column\Id;

    #[Cycle\Relation\BelongsTo(target: User::class, nullable: true)]
    private ?User $user = null;

    #[Cycle\Column(type: 'string')]
    private string $text;

    public function setUser(?User $user): void
    {
        $this->user = $user;
    }

    public function setText(string $value): void
    {
        $this->text = $value;
    }

    public function getText(): string
    {
        return $this->text;
    }

    public function getUser(): ?User
    {
        return $this->user;
    }
}
  1. php app.php cycle:migrate -r

Results:
Screenshot 2021-08-06 at 11 30 17

P.S. Column Id Trait:

<?php
declare(strict_types=1);

namespace App\Database\Column;

use Cycle\Annotated\Annotation as Cycle;
use App\Database\Typecast\Uuid;

trait Id
{
    #[Cycle\Column(type: 'uuid', typecast: Uuid::class, primary: true)]
    private ?Uuid $id = null;

    public function getId(): ?Uuid
    {
        return $this->id;
    }
}

Results expected as nullable: true.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions