Doctrine join + ublaboo/datagrid

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jonyssss
Člen | 3
+
0
-

Ahoj,
snažím se hezky vyřešit jednu věc a řešení, které funguje, mi nepřijde úplně ideální. Jedná se o aukční systém kde chci udělat výpis položek, na které daný uživatel udělal příhoz. Níže posílám entity a vytvoření gridu na které jsem přišel. Na tom řešení se mi nelíbí, že datagrid vykoná hezký příkaz do db kde se joinou obě tabulky ze kterých chci data ale pak se znova dotahujou data po jednom když se vypisuje název položky. Nenapadá někoho jiné řešení? Díky za tipy

/**
 * @ORM\Entity
 */
class Item {

	use \Kdyby\Doctrine\Entities\MagicAccessors;

	/**
	 * @ORM\Id
	 * @ORM\Column(type="integer")
	 * @ORM\GeneratedValue
	 */
	protected $id;

	/**
	 * @var string
	 *
	 * @ORM\Column(name="name", type="string", length=64, nullable=false)
	 */
	protected $name;

	/**
	 * @ORM\OneToMany(targetEntity="Bid", mappedBy="item_id")
	 */
	protected $bids;

	public function __construct() {
		$this->bids = new ArrayCollection();
	}

}
/**
 * @ORM\Entity
 */
class Bid {

	use \Kdyby\Doctrine\Entities\MagicAccessors;

	/**
	 * @ORM\Id
	 * @ORM\Column(type="integer")
	 * @ORM\GeneratedValue
	 */
	public $id;

	/**
	 * @var float
	 *
	 * @ORM\Column(name="price", type="float", nullable=false)
	 */
	public $price;

	/**
	 * @ORM\ManyToOne(targetEntity="Item", inversedBy="bids")
	 * @ORM\JoinColumn(name="item_id", referencedColumnName="id", nullable=FALSE)
	 */
	public $item;

	/**
	 * @ORM\ManyToOne(targetEntity="User")
	 * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=FALSE)
	 */
	public $user;

}
/**
 * @ORM\Entity
 */
class User {

	use \Kdyby\Doctrine\Entities\MagicAccessors;

	/**
	 * @ORM\Id
	 * @ORM\Column(type="integer")
	 * @ORM\GeneratedValue
	 */
	protected $id;

	/**
	 * @var string
	 *
	 * @ORM\Column(name="name", type="string", length=64, nullable=false)
	 */
	protected $name;

}
$g = new \Ublaboo\DataGrid\DataGrid();

$b = $this->em->createQueryBuilder();
$b->select(['b'])
				->from(\App\Bid::class, 'b')
				->join(\App\Item::class, 'i', \Doctrine\ORM\Query\Expr\Join::WITH, 'i.id = b.item')
				->whereCriteria(['b.user' => 1]);


$g->setDataSource($b);

$g->addColumnText('name', 'Název položky', 'item.name')->setFilterText('i.name');
$g->addColumnText('price', 'Cena');


return $g;
David Matějka
Moderator | 6445
+
+2
-
$b->select('b, i')
                ->from(\App\Bid::class, 'b')
                ->join('b.item', 'i')
                ->whereCriteria(['b.user' => 1]);
jonyssss
Člen | 3
+
0
-

Geniální přesně tohle jsem potřeboval.