У меня возникли некоторые проблемы с извлечения данных из схемы базы данных и отображения его в сетке, это схема SQL я использую: Медленные данные, показывающие в рейтингах
Вид:
{% extends 'MyBundle:Default:index.html.twig' %}
{% block body %}
<table class="table table-striped table-bordered">
<tr>
<th>Player name</th>
{% for action in actions %}
<th>{{ action.displayName }}</th>
{% endfor %}
</tr>
{% for stat in stats %}
<tr>
<td>{{ stat.playername }}</td>
{% for key, action in actions %}
{% for key2, a in stat.actions|group('id', stat.id) if (key2 == (key + 1)) %}
<td>{{ a|length }}</td>
{% else %}
<td>0</td>
{% endfor %}
{% endfor %}
</tr>
{% else %}
<p>No statistics have been found</p>
{% endfor %}
</table>
{% endblock %}
групповая функция используется для группировки данных для пользователя, это функция, которую я написал: namespace MyName \ MyBundle \ Twig;
class GroupExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('group', array($this, 'arrayGroup')),
);
}
public function arrayGroup($array, $element, $playerid)
{
$outputArr = array();
foreach($array as $key => $value)
{
if($value->getPlayer()->getId() == $playerid)
{
$outputArr[$value->getAction()->getId()][] = $value;
}
}
return $outputArr;
}
/**
* {inheritDoc}
*/
public function getName()
{
return 'group_extension';
}
}
Все работает и такое, но он загружает очень медленно (я заполнял таблицы с фиктивными записями) Я думаю, это потому, что я сделал oneToMany отношения в игроке сущности легко группы все. Я просто не знаю никаких других возможностей.
Это тот игрок, Entity
use Doctrine\ORM\Mapping as ORM;
/**
* Player
*
* @ORM\Table(name="player")
* @ORM\Entity
*/
class Player
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="playerName", type="string", length=17)
*/
private $playerName;
/**
* @var PlayerAction[]
*
* @ORM\OneToMany(targetEntity="PlayerAction", mappedBy="player")
*/
private $actions;
/**
* Set id
*
* @param integer $id
* @return Player
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set playerName
*
* @param string $playerName
* @return Player
*/
public function setPlayerName($playerName)
{
$this->playerName = $playerName;
return $this;
}
/**
* Get playerName
*
* @return string
*/
public function getPlayerName()
{
return $this->playerName;
}
/**
* @param mixed $actions
*/
public function setActions($actions)
{
$this->actions = $actions;
}
/**
* @return mixed
*/
public function getActions()
{
return $this->actions;
}
}
код работает он Justs занимает много времени, чтобы показать на экране, и я хотите ускорить его, используя возможный лучший способ, потому что у меня плохой код. Думаю –
Используйте панель инструментов отладки Symfony2 (в dev environement), чтобы узнать, сколько времени занимает каждый запрос. –