Я новичок в Symfony (2.7) и доктрине и имею следующие вопросы / проблемы:
В своем собственном проекте я создал реляционную базу данных для платежной системы. В этой базе данных у меня есть таблица с названием «company» и таблица с именем «account». Таблица компании содержит данные пользователя, а таблица счетов сохраняет текущий баланс счета компании. Вот структура таблиц (с mysql):
аккаунт:
таблица счетов
компания:
id (первичный ключ, автоинкремент, int)
другие детали
Между таблицами есть соотношение 1: 1. Один человек имеет один аккаунт. Идентификатор компании - это внешний ключ в таблице счетов и ссылки на идентификатор в таблице компаний.
После создания этих таблиц я генерирую docrtrine orm xmls с:
php app/console doctrine:mapping:import FrontBundle
И генерировать сущности с помощью:
php app/console generate:doctrine:entities FrontBundle
После создания доктрины orm xmls, xml-файл таблицы счетов:
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine- mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="FrontBundle\Entity\PaymentAccounts" table="payment__accounts">
<unique-constraints>
<unique-constraint name="company_id" columns="company_id"/>
</unique-constraints>
<id name="accountId" type="integer" column="account_id">
<generator strategy="IDENTITY"/>
</id>
<field name="currentBalance" type="decimal" column="current_balance" precision="10" scale="2" nullable="false">
<options>
<option name="default">0.00</option>
</options>
</field>
<field name="accountCreateDate" type="datetime" column="account_create_date" nullable="false">
<options>
<option name="default">CURRENT_TIMESTAMP</option>
</options>
</field>
<many-to-one field="company" target-entity="UgCompany" fetch="LAZY">
<join-columns>
<join-column name="company_id" referenced-column-name="id"/>
</join-columns>
</many-to-one>
</entity>
</doctrine-mapping>
Мой первый вопрос: почему доктрина / symfony автоматически генерируют отношения многие-к-одному? Как я могу изменить его на один к одному?
После создания сущностей сущность таблицы счетов:
namespace FrontBundle\Entity;
/**
* PaymentAccounts
*/
class PaymentAccounts {
/**
* @var string
*/
private $currentBalance = '0.00';
/**
* @var \DateTime
*/
private $accountCreateDate = 'CURRENT_TIMESTAMP';
/**
* @var integer
*/
private $accountId;
/**
* @var \FrontBundle\Entity\UgCompany
*/
private $company;
/**
* Set currentBalance
*
* @param string $currentBalance
*
* @return PaymentAccounts
*/
public function setCurrentBalance($currentBalance)
{
$this->currentBalance = $currentBalance;
return $this;
}
/**
* Get currentBalance
*
* @return string
*/
public function getCurrentBalance()
{
return $this->currentBalance;
}
/**
* Set accountCreateDate
*
* @param \DateTime $accountCreateDate
*
* @return PaymentAccounts
*/
public function setAccountCreateDate($accountCreateDate)
{
$this->accountCreateDate = $accountCreateDate;
return $this;
}
/**
* Get accountCreateDate
*
* @return \DateTime
*/
public function getAccountCreateDate()
{
return $this->accountCreateDate;
}
/**
* Get accountId
*
* @return integer
*/
public function getAccountId()
{
return $this->accountId;
}
/**
* Set company
*
* @param \FrontBundle\Entity\UgCompany $company
*
* @return PaymentAccounts
*/
public function setCompany(\FrontBundle\Entity\UgCompany $company = null)
{
$this->company = $company;
return $this;
}
/**
* Get company
*
* @return \FrontBundle\Entity\UgCompany
*/
public function getCompany()
{
return $this->company;
}
}
Вторые вопросы: почему вместо company_od создается сущность компании?
Если я добавлю строку в таблицу учетных записей и попытаюсь получить записи из таблицы, мой браузер загружает, загружает и загружает ... А затем мой браузер зависает ...
public function getAllAccounts() {
$accounts = $this->getDoctrine()->getManager()->getRepository('FrontBundle:PaymentAccounts')->createQueryBuilder("C")
->select()
->getQuery()
->getResult();
return $accounts;
}
Проблема заключается в следующем, что я пытался описать:
Я попытался напечатать массив результатов запроса и увидел, что запрос пытается загрузить все компании вместо данных одной компании, которые мне нужны. Я получаю массив с account_id, current_balance, current_timestamp и, по крайней мере, массив с массивами всех компаний, которые находятся в таблице компании (таблицы компании имеют 4500-5000 строк / записей). Но я хочу только информацию о компании с данным company_id .. и не все компании ..
Это проблема с отношением многие-к-одному? или это проблема с моим запросом? возможно я создаю неправильную базу данных mysql? надеюсь на полезные ответы.