Nettrine vs Datagrid Type Error

grovik
Člen | 54
+
0
-

Narazil jsem na problém, který se projevuj jen v případě použití Datagridu (Contributte).
Tak jsem narazil na lepší definici.
Chyba se projevuje pokud zavolám getUserName() ať je to kdekoliv. Někde se tam objeví snaha přiřadit k updatedBy string. Zajímavé je, že pokud se uživatel přihlásí a objekt entity Users je přiražený jako součást údajů v Authenticatoru tak jméno dostanu bez problémů.
Testováním jsem zjistil, že datagridu stačí aby tam byl odkaz na Entitu Users a chyba je na světe.

`TypeError
Cannot assign string to property App\Model\Orm\Entity\Users::$updatedBy of type ?App\Model\Orm\Entity\Users search►
`
Pokud mám v datagridu zobrazit položku, která je vazbou na položku jinou v jiné tabulce. Například
Autor → Uživatel.
Pro názornost (takhle to funguje a vše je v pořádku):

  public function create(): DataGrid
    {
        $grid = new DataGrid;
        $grid->setRememberState(false);
        $grid->setDataSource($this->pageRepository->findAll());

        $grid->addColumnText('title', 'Název')
            ->setFilterText();
        $grid->addColumnText('link', 'Odkaz')
            ->setFilterText();


        $grid->addAction('edit', '', 'Admin:page', ['id' => 'id'])
            ->setIcon('pencil-alt');
        $grid->addAction('delete', '', 'Admin:deletePage', ['id' => 'id'])
            ->setIcon('trash-alt')
            ->setClass('btn btn-danger');

        return $grid;
    }

Pokud ovšem přidám do datagridu autora:

  public function create(): DataGrid
    {
        $grid = new DataGrid;
        $grid->setRememberState(false);
        $grid->setDataSource($this->pageRepository->findAll());

        $grid->addColumnText('title', 'Název')
            ->setFilterText();
        $grid->addColumnText('link', 'Odkaz')
            ->setFilterText();
        $grid->addColumnText('author', 'Vytvořil')
            ->setRenderer(function ($item) {
                return $item->getAuthor()->getUserName();
            });


        $grid->addAction('edit', '', 'Admin:page', ['id' => 'id'])
            ->setIcon('pencil-alt');
        $grid->addAction('delete', '', 'Admin:deletePage', ['id' => 'id'])
            ->setIcon('trash-alt')
            ->setClass('btn btn-danger');

        return $grid;
    }

entita PAGE má položku Author nadefinovanou takto:

#[ORM\ManyToOne(targetEntity: "Users", cascade: ["none"], inversedBy: "pages")]
#[ORM\JoinColumn(name: "author_id", referencedColumnName: "id", onDelete: "CASCADE")]
private $author;

Na protější straně je to potom takto (entita USERS):


#[ORM\OneToMany(mappedBy: "author", targetEntity: "Pages")]
#[ORM\Column(type: 'integer', nullable: true)]
public Pages $pages;

Položka updateBy je pak definována takto:


#[ORM\ManyToOne(targetEntity: "Users", cascade: ['none'])]
#[ORM\JoinColumn(name: "updated_by", referencedColumnName: "id")]
#[ORM\Column(nullable: true)]
public ?Users $updatedBy;

V jiných situacích problém není.
Pokud k tabulce Users přistupuji přes vazbu normálně dostanu všechny hodnoty jak je potřeba. Kdykoliv se v Gridu objeví položka s odkazem na tabulku Users tak se objeví tahle chyba.
Někde patrně něco přehlížím nebo nevím. :-) opakovaně se k tomu vracím už asi 5 den. Zkusím něco předělat, ale zatím nic.
Díky za tipy a nápad co by tomu mohlo být.

Editoval grovik (1. 4. 13:10)

grovik
Člen | 54
+
0
-

Tak nevím. Předělal jsem půl DB a dospěl jsem k tomu, že doctrine dvě položky, které obsahují stejná data a jsou stejně nadefinované, přiděluje jiné typy z hlediska databáze.

 #[ORM\ManyToOne(targetEntity: "Users")]
    #[ORM\JoinColumn(name: "created_by", referencedColumnName: "id")]
    public Users $createdBy;
 #[ORM\ManyToOne(targetEntity: "Users")]
    #[ORM\JoinColumn(name: "updated_by", referencedColumnName: "id")]
    #[ORM\Column(nullable: true)]
    public ?Users $updatedBy;

Jediný rozdíl je v tom, že updatedBy může být null.

Jak sáhnu po nějakém gettru třídy Users tak se mi vrátí chyba:
Cannot assign string to property App\Model\Orm\Entity\Users::$updatedBy of type ?App\Model\Orm\Entity\Users

Editoval grovik (1. 4. 21:14)