tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Lean Mapper – smazání položky ze seznamu (z proměnné) typu m:belongsToMany

před 6 lety

svezij
Člen | 69

Ahojte, mám entitu výrobku obsahující jako jednu z proměnných seznamu atributů:

/**
 * @property int $id
 * ...
 * @property ProductAttribute[] $attributes m:belongsToMany(:product_attributes)
 * ...
 */
class Product extends \LeanMapper\Entity
{
}

Dále mám prezenter s formulářem a metodu pro obsluhu odeslaného formuláře. Procházím atributy výrobku z formuláře a v seznamu atributů entity Product, tedy v Product::$attributes, hledám daný atribut.

  1. Je-li ve formuláři vyplněná hodnota atributu a v seznamu atributů jsem tento atribut našel, změním hodnotu a zavolám persist pro uložení
  2. Je-li ve formuláři vyplněná hodnota atributu a v seznamu atributů jsem atribut nenašel, vytvořím nový objekt typu ProductAttribute a zavolám persist pro uložení
  3. Není-li ve formuláři vyplněná hodnota atributu a v seznamu atributů jsem atribut nenašel, nedělám nic
  4. A není-li ve formuláři hodnota a v seznamu jsem atribut našel, zavolám $this->productAttributeRepository->delete($foundAttribute)

V posledním bodě pak vzniká problém. Tzn. chci-li smazat atribut výrobku, laděnka vyhodí výjimku:

It is not allowed to create entity from detached instance of LeanMapper\Row.

Atribut se v pořádku smaže, ale místo přesměrování na seznam výrobků se mi dostane výjimky, a to si samozřejmě nepřeji. Měl bych po mazání něco udělat? Mockrát děkuji.

před 6 lety

svezij
Člen | 69

Znovu Vás zdravím. Po 15 dnech jsem opět narazil na tentýž problém při mazání položky typu m:belongsToMany, a vzpomněl jsem si, že jsem se tu už ptal. Tentokrát mám Entitu dopravce a dopravci přiděluji regiony s nějakými dalšími hodnotami. Má-li dopravce přidělený region a já jej chci smazat, normálně se přes $this->carrierRegionRepository->delete($foundRegion) smaže, ale místo přesměrování vyhodí výjimku, kterou jsem uvedl výše. Opravdu nikdo netušíte, čím by to mohlo být? Chcete nějaké upřesňující informace? Ještě jednou moc děkuji.

před 6 lety

Casper
Člen | 253

Tahle výjimka nemá nic společného s mazáním entity (které ti koneckonců funguje). Píšeš, že výjimku dostaneš místo přesměrování, nicméně tahle výjimka vzniká v konstruktoru entity, což s přesměrováním také nesouvisí. Kdyžtak sem dej ten kód, kde k výjimce dochází.