Nettrine ORM Attribute zlobí při používání trait

Michwuanquana
Člen | 22
+
0
-

Zdravím,

když používám attributes v entitě, tak mám problém s traity.

např. entita User

#[ORM\Entity(repositoryClass: App\Model\Database\Repository\UserRepository::class)]
#[ORM\Table(name: "`user`")]
#[ORM\HasLifecycleCallbacks]
class User extends AbstractEntity
{
	use TId;
	use TCreatedAt;
	use TUpdatedAt;

	#[ORM\Column(type: "string", length: 255, nullable: FALSE, unique: false)]
	private string $name;

	#[ORM\Column(type: "string", length: 255, nullable: FALSE, unique: false)]
	private string $surname;

	//...

kde TId je:

trait TId
{
	#[ORM\Column(type: "integer", nullable: FALSE)]
	#[ORM\GeneratedValue]
	#[ORM\Id]
	private int $id;

	//...

Nefunguje, zlobí se, že nemá primární klíč.
No identifier/primary key specified for Entity "App\Model\Database\Entity\User" sub class of "App\Model\Database\Entity\AbstractEntity". Every Entity must have an identifier/primary key.

Pokud je vložen přímo, funguje:

#[ORM\Entity(repositoryClass: App\Model\Database\Repository\UserRepository::class)]
#[ORM\Table(name: "`user`")]
#[ORM\HasLifecycleCallbacks]
class User extends AbstractEntity
{
	use TCreatedAt;
	use TUpdatedAt;

	#[ORM\Column(type: "integer", nullable: FALSE)]
	#[ORM\GeneratedValue]
	#[ORM\Id]
	private int $id;

	#[ORM\Column(type: "string", length: 255, nullable: FALSE, unique: false)]
	private string $name;

	#[ORM\Column(type: "string", length: 255, nullable: FALSE, unique: false)]
	private string $surname;

	//...

nicméně i TCreatedAt a TUpdatedAt se vloží správně. (bin/console orm:schema-tool:update, v prvním případě zlobí i v prohlížeči stejnou chybou)

S klasickými annotations to funguje i v prvním případě, že by nějaká chyba?

Gappa
Nette Blogger | 208
+
0
-

Nechybí v traitě use Doctrine\ORM\Mapping as ORM;?

Michwuanquana
Člen | 22
+
+1
-

Já jsem ale vůl, jistě že chybí :D

Felix
Nette Core | 1245
+
0
-

V aktualni situaci, kdy mame PHP 8.4, bych doporucoval prejit na PHP attributy.

<?php declare(strict_types = 1);

namespace App\Domain\Database;

use DateTime;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: UserRepository::class)]
#[ORM\Table(name: '`user`')]
class User
{

	#[ORM\Id]
	#[ORM\GeneratedValue]
	#[ORM\Column(type: 'integer')]
	private int $id;

	#[ORM\Column(type: 'string')]
	private string $username;

	#[ORM\Column(type: 'datetime')]
	private DateTime $createdAt;

	#[ORM\Column(type: 'datetime', nullable: true)]
	private ?DateTime $updatedAt = null;

	public function __construct(string $username)
	{
		$this->username = $username;
		$this->createdAt = new DateTime();
	}

    ...
}