我試圖寫一個表單提交對MySQL數據庫,但我不能得到它的工作,我已經嘗試了很多東西(單獨的窗體,創建一個字段->add('foo', new foo())
,並試圖解析普通的SQL與普通的HTML表單是我唯一的解決辦法,這顯然不是最好的Symfony2關係實體+表格
這是我的數據庫結構:!
[在這裏輸入的形象描述] [1]
正如你所看到的,我需要在編寫它的用戶中插入comments
textarea到ticketcomments
等。
對crmentity
的description
字段。
然後在ticketcf
,我需要從表單提交的領域,這是(因爲你不會知道,如果我不告訴你,因爲字段名):
tcf.cf594 AS Type,
tcf.cf675 AS Suscription,
tcf.cf770 AS ID_PRODUCT,
tcf.cf746 AS NotificationDate,
tcf.cf747 AS ResponseDate,
tcf.cf748 AS ResolutionDate,
,當然,對於提交的表單,每個表格需要具有相同的ticketid
id,因此我們可以通過一個簡單的查詢來檢索它。
使用普通的SQL代替使用DQL和Symfony2格式很容易,但不是一個好的方法。
編輯 這是我的新創建的實體Ticket.php
,其關係到上面......如果有人能檢查出來,並告訴我,如果它的好表...
ticket.php
<?php
namespace WbsGo\clientsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* VtigerTicketcomments
*
* @ORM\Table(name="vtiger_troubletickets")
* @ORM\Entity(repositoryClass="WbsGo\clientsBundle\Entity\TicketsRepository")
*/
class Tickets
{
/**
* @var \WbsGo\clientsBundle\Entity\VtigerCrmentity
*
* @ORM\OneToOne(targetEntity="WbsGo\clientsBundle\Entity\VtigerCrmentity")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="ticketid", referencedColumnName="crmid", unique=true)
* })
* @ORM\Id
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="ticket_no", type="string", length=100, nullable=false)
*
*/
private $ticketNo;
/**
* @var string
*
* @ORM\Column(name="groupname", type="string", length=100, nullable=true)
*/
private $groupName;
/**
* @ORM\ManyToOne(targetEntity="VtigerContactdetails")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="parent_id", referencedColumnName="contactid", unique=true)
* })
*/
private $parentId;
/**
* @ORM\ManyToOne(targetEntity="VtigerAssets")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="product_id", referencedColumnName="assetsid", unique=true)
* })
*/
private $productId;
/**
* @var string
*
* @ORM\Column(name="priority", type="string", length=100, nullable=true)
*/
private $priority;
/**
* @var string
*
* @ORM\Column(name="severity", type="string", length=100, nullable=true)
*/
private $severity;
/**
* @var string
*
* @ORM\Column(name="status", type="string", length=100, nullable=true)
*/
private $status;
/**
* @var string
*
* @ORM\Column(name="category", type="string", length=100, nullable=true)
*/
private $category;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255, nullable=true)
*/
private $title;
/**
* @var text
*
* @ORM\Column(name="solution", type="text", nullable=true)
*/
private $solution;
/**
* @var text
*
* @ORM\Column(name="update_log", type="text", nullable=true)
*/
private $updateLog;
/**
* @var integer
*
* @ORM\Column(name="version_id", type="integer", nullable=true)
*/
private $versionId;
/**
* @var string
*
* @ORM\Column(name="hours", type="string", length=255, nullable=true)
*/
private $hours;
/**
* @var string
*
* @ORM\Column(name="days", type="string", length=255, nullable=true)
*/
private $days;
/**
* @var integer
*
* @ORM\Column(name="from_portal", type="integer", nullable=true)
*/
private $fromPortal;
/**
* @ORM\OneToMany(targetEntity="VtigerTicketcomments", mappedBy="ticketid")
*
*/
protected $comments;
/**
* @ORM\OneToOne(targetEntity="VtigerTicketcf", mappedBy="id")
*/
protected $ticketcf;
/**
* @ORM\OneToOne(targetEntity="VtigerCrmentity", mappedBy="crmid")
*/
protected $crmtable;
}
VtigerTicketcf.php
<?php
namespace WbsGo\clientsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* VtigerTicketcf
*
* @ORM\Table(name="vtiger_ticketcf")
* @ORM\Entity
*/
class VtigerTicketcf
{
/**
* @var string
*
* @ORM\Column(name="cf_546", type="string", length=255, nullable=true)
*/
private $cf546;
/**
* @var string
*
* @ORM\Column(name="cf_556", type="string", length=255, nullable=true)
*/
private $cf556;
/**
* @var string
*
* @ORM\Column(name="cf_589", type="string", length=3, nullable=true)
*/
private $cf589;
/**
* @var string
*
* @ORM\Column(name="cf_590", type="string", length=3, nullable=true)
*/
private $cf590;
/**
* @var string
*
* @ORM\Column(name="cf_592", type="string", length=100, nullable=true)
*/
private $cf592;
/**
* @var string
*
* @ORM\Column(name="cf_593", type="string", length=255, nullable=true)
*/
private $cf593;
/**
* @var string
*
* @ORM\Column(name="cf_594", type="string", length=255, nullable=true)
*/
private $cf594;
/**
* @var string
*
* @ORM\Column(name="cf_675", type="string", length=50, nullable=true)
*/
private $cf675;
/**
* @var float
*
* @ORM\Column(name="cf_689", type="decimal", nullable=true)
*/
private $cf689;
/**
* @var float
*
* @ORM\Column(name="cf_690", type="decimal", nullable=true)
*/
private $cf690;
/**
* @var float
*
* @ORM\Column(name="cf_691", type="decimal", nullable=true)
*/
private $cf691;
/**
* @var float
*
* @ORM\Column(name="cf_693", type="decimal", nullable=true)
*/
private $cf693;
/**
* @var string
*
* @ORM\Column(name="cf_746", type="string", length=50, nullable=true)
*/
private $cf746;
/**
* @var string
*
* @ORM\Column(name="cf_747", type="string", length=50, nullable=true)
*/
private $cf747;
/**
* @var string
*
* @ORM\Column(name="cf_748", type="string", length=50, nullable=true)
*/
private $cf748;
/**
* @var string
*
* @ORM\Column(name="cf_761", type="string", length=255, nullable=true)
*/
private $cf761;
/**
* @var string
*
* @ORM\Column(name="cf_763", type="string", length=255, nullable=true)
*/
private $cf763;
/**
* @var string
*
* @ORM\Column(name="cf_764", type="string", length=255, nullable=true)
*/
private $cf764;
/**
* @var string
*
* @ORM\Column(name="cf_765", type="string", length=255, nullable=true)
*/
private $cf765;
/**
* @var string
*
* @ORM\Column(name="cf_770", type="string", length=50, nullable=true)
*/
private $cf770;
/**
* @var \WbsGo\clientsBundle\Entity\Tickets
* @ORM\Id
* @ORM\OneToOne(targetEntity="WbsGo\clientsBundle\Entity\Tickets")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="ticketid", referencedColumnName="ticketid", unique=true)
* })
*
*/
private $id;
}
VtigerTicketcomments.php
<?php
namespace WbsGo\clientsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* VtigerTicketcomments
*
* @ORM\Table(name="vtiger_ticketcomments")
* @ORM\Entity
*/
class VtigerTicketcomments
{
/**
* @var string
*
* @ORM\Column(name="comments", type="text", nullable=true)
*/
private $comments;
/**
* @var integer
*
* @ORM\Column(name="ownerid", type="integer", nullable=false)
*/
private $ownerid;
/**
* @var string
*
* @ORM\Column(name="ownertype", type="string", length=10, nullable=true)
*/
private $ownertype;
/**
* @var \DateTime
*
* @ORM\Column(name="createdtime", type="datetime", nullable=false)
*/
private $createdtime;
/**
* @var integer
*
* @ORM\Column(name="commentid", type="integer")
* @ORM\Id
*/
private $id;
/**
* @var \WbsGo\clientsBundle\Entity\Tickets
* @ORM\OneToOne(targetEntity="WbsGo\clientsBundle\Entity\Tickets")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="ticketid", referencedColumnName="ticketid", unique=true)
* })
*
*/
private $ticketid;
}
VtigerCrmentity.php
<?php
namespace WbsGo\clientsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* VtigerCrmentity
*
* @ORM\Table(name="vtiger_crmentity")
* @ORM\Entity
*/
class VtigerCrmentity
{
/**
* @var integer
*
* @ORM\Column(name="smcreatorid", type="integer", nullable=false)
*/
private $smcreatorid;
/**
* @var integer
*
* @ORM\Column(name="smownerid", type="integer", nullable=false)
*/
private $smownerid;
/**
* @var integer
*
* @ORM\Column(name="modifiedby", type="integer", nullable=false)
*/
private $modifiedby;
/**
* @var string
*
* @ORM\Column(name="setype", type="string", length=30, nullable=false)
*/
private $setype;
/**
* @var string
*
* @ORM\Column(name="description", type="text", nullable=true)
*/
private $description;
/**
* @var \DateTime
*
* @ORM\Column(name="createdtime", type="datetime", nullable=false)
*/
private $createdtime;
/**
* @var \DateTime
*
* @ORM\Column(name="modifiedtime", type="datetime", nullable=false)
*/
private $modifiedtime;
/**
* @var \DateTime
*
* @ORM\Column(name="viewedtime", type="datetime", nullable=true)
*/
private $viewedtime;
/**
* @var string
*
* @ORM\Column(name="status", type="string", length=50, nullable=true)
*/
private $status;
/**
* @var integer
*
* @ORM\Column(name="version", type="integer", nullable=false)
*/
private $version;
/**
* @var integer
*
* @ORM\Column(name="presence", type="integer", nullable=true)
*/
private $presence;
/**
* @var integer
*
* @ORM\Column(name="deleted", type="integer", nullable=false)
*/
private $deleted;
/**
* @var integer
*
* @ORM\Column(name="crmid", type="integer")
* @ORM\Id
*/
private $crmid;
}
這是我的倉庫方法...
public function findByIdAndCustomerId($id) {
$query = $this->getEntityManager()
->createQuery(
'
SELECT
IDENTITY(t.id) AS id,
t.ticketNo AS Ticket,
t.title AS Asunto,
t.status AS Estado,
t.updateLog AS LOG,
t.hours AS Horas,
t.solution AS Solucion,
t.priority AS Prioridad,
tcf.cf748 AS F_Reso,
tcf.cf747 AS F_Resp,
tcf.cf746 AS F_Noti,
tcf.cf770 AS IDPROD,
tcf.cf594 AS Tipo,
tcf.cf675 AS Suscripcion,
c.comments AS Comments,
CONCAT (CONCAT(s.firstname, \' \'), s.lastname) AS Contacto
FROM WbsGoclientsBundle:Tickets t
JOIN t.parentId s
JOIN t.ticketcf tcf
JOIN t.comments c
WHERE t.ticketNo = :ticketNo
')
->setParameter('ticketNo', $id)
;
try {
//return $query->getSingleResult();
return $query->getResult();
}
catch (\Doctrine\ORM\NoResultException $e)
{
return null;
}
}
我可以檢索ARRA y的X票,即使我只搜索一個ID,因爲如果ID1有4個評論,那麼我得到4張相同的票,每個評論一張...我如何才能讓它只有一張票comments => array(...)
,所以我可以迭代內comments
陣列裏面的樹枝?在 /var/www/wbsgo/dev.wbsgo/vendor/doctrine/orm crmid:
而且還VtigerCrmentity.Description
也不管用,它返回這個錯誤...
注意:未定義指數/ lib目錄/教義/ ORM /查詢/ SqlWalker。PHP 線826
我沒有getter和setter重新生成,因爲我再他們,如果註釋都OK,該實體將具有get/set正確地更新和我的形式就可以提交使用關係,對嗎?
沒錯,我沒有它,我會盡量避免,因爲數據庫已被其他平臺,所以我不想改變什麼,以避免衝突。你說的(使用'collection')我看不出有什麼渲染,我真正得到它正在使用'工作的唯一途徑的方式 - >添加(「評論」, \t \t \t \t \t新VtigerTicketcommentsType() \t \t \t)'這種方式一切都很好,但我不知道如何按下submit,你提到了'$ form-> getExtraData()',但是在我的情況下這是如何工作的?另外,感謝您的回覆。 –
編輯了一些額外的信息。 – usoban
謝謝,你能解釋一下你在哪裏說'爲了克服這個問題,你可以傳遞數組而不是新創建的對象嗎?我不明白你對'comments數組必須具有長度> 0的評論 - 儘管沒有實際數據,評論必須存在「。' –