简体   繁体   English

Symfony2:如何从数组中获取值并将其打印到twing文件中

[英]Symfony2 : How to get value from array and print it into twing file

I am new to Symfony. 我是Symfony的新手。 I am currently using symfony2.4 . 我目前正在使用symfony2.4。

where I stuck - 我坚持的地方-

I have one scenario. 我有一种情况。 In which I have to show simple listing in twing file. 我必须在其中显示twing文件中的简单清单。 The data comes from database. 数据来自数据库。 This data comes from the two joined tables. 此数据来自两个联接表。

First table is Teams 第一张桌子是Teams

id ID

name 名称

nickname 昵称

country_id COUNTRY_ID

Second table is Country 第二表是国家

id ID

name 名称

I want to print data like this 我想像这样打印数据

     Name     | Nickname | Country(name)

Mumbai Indians| MI       | India
New Royals    | NR       | India

So What I do in my twing file : 所以我在twing文件中做什么:

<table border=1>
    <tr>
        <th>Name</th>
        <th>Nickname</th>
        <th>Country</th>
    </tr>
{% for team in teams %}
  <tr>
      <td>{{ team.name }}</td>
      <td>{{ team.nickname }}</td>
      <td>{{ team.country }}</td> <<<<<<<<<<<
  </tr>
{% endfor %}

So Here country is not working 所以这里的国家不工作

This is my controller code 这是我的控制器代码

$teams = $this->getDoctrine()
                ->getRepository('AdminSporteventsBundle:Teams')
                ->findAll();

        if (!$teams) {
            throw $this->createNotFoundException('No news found');
        }
        $build['teams'] = $teams;
        return $this->render('AdminSporteventsBundle:Teams:teams_list.html.twig', $build);

EDIT 编辑

As requested Teams.php (Entity) 根据要求Teams.php(实体)

namespace Admin\SporteventsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Teams
 *
 * @ORM\Table(name="teams", uniqueConstraints={@ORM\UniqueConstraint(name="uq_teams_name_sport_id", columns={"sport_id", "name"})}, indexes={@ORM\Index(name="idx_teams_by_sport_id", columns={"sport_id"}), @ORM\Index(name="idx_teams_by_sport_id_country_id", columns={"sport_id", "country_id"}), @ORM\Index(name="idx_teams_not_deleted", columns={"deleted"}), @ORM\Index(name="IDX_96C22258F92F3E70", columns={"country_id"}), @ORM\Index(name="IDX_96C222581177C375", columns={"information_page_id"}), @ORM\Index(name="IDX_96C222586D947EBB", columns={"logo_image_id"})})
 * @ORM\Entity
 */
class Teams
{
    /**
     * @var integer
     *
     * @ORM\Column(name="team_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @ORM\SequenceGenerator(sequenceName="teams_team_id_seq", allocationSize=1, initialValue=1)
     */
    private $teamId;

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

    /**
     * @var boolean
     *
     * @ORM\Column(name="deleted", type="boolean", nullable=false)
     */
    private $deleted;

    /**
     * @var integer
     *
     * @ORM\Column(name="editable_pages_page_id", type="integer", nullable=true)
     */
    private $editablePagesPageId;

    /**
     * @var string
     *
     * @ORM\Column(name="nickname", type="string", nullable=true)
     */
    private $nickname;

    /**
     * @var \Admin\SporteventsBundle\Entity\Countries
     *
     * @ORM\ManyToOne(targetEntity="Admin\SporteventsBundle\Entity\Countries")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="country_id", referencedColumnName="country_id")
     * })
     */
    private $country;

    /**
     * @var \Admin\SporteventsBundle\Entity\InformationPages
     *
     * @ORM\ManyToOne(targetEntity="Admin\SporteventsBundle\Entity\InformationPages")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="information_page_id", referencedColumnName="information_page_id")
     * })
     */
    private $informationPage;

    /**
     * @var \Admin\SporteventsBundle\Entity\Images
     *
     * @ORM\ManyToOne(targetEntity="Admin\SporteventsBundle\Entity\Images")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="logo_image_id", referencedColumnName="image_id")
     * })
     */
    private $logoImage;

    /**
     * @var \Admin\SporteventsBundle\Entity\Sports
     *
     * @ORM\ManyToOne(targetEntity="Admin\SporteventsBundle\Entity\Sports")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="sport_id", referencedColumnName="sport_id")
     * })
     */
    private $sport;



    /**
     * Get teamId
     *
     * @return integer 
     */
    public function getTeamId()
    {
        return $this->teamId;
    }

    /**
     * Set name
     *
     * @param string $name
     * @return Teams
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Set deleted
     *
     * @param boolean $deleted
     * @return Teams
     */
    public function setDeleted($deleted)
    {
        $this->deleted = $deleted;

        return $this;
    }

    /**
     * Get deleted
     *
     * @return boolean 
     */
    public function getDeleted()
    {
        return $this->deleted;
    }

    /**
     * Set editablePagesPageId
     *
     * @param integer $editablePagesPageId
     * @return Teams
     */
    public function setEditablePagesPageId($editablePagesPageId)
    {
        $this->editablePagesPageId = $editablePagesPageId;

        return $this;
    }

    /**
     * Get editablePagesPageId
     *
     * @return integer 
     */
    public function getEditablePagesPageId()
    {
        return $this->editablePagesPageId;
    }

    /**
     * Set nickname
     *
     * @param string $nickname
     * @return Teams
     */
    public function setNickname($nickname)
    {
        $this->nickname = $nickname;

        return $this;
    }

    /**
     * Get nickname
     *
     * @return string 
     */
    public function getNickname()
    {
        return $this->nickname;
    }

    /**
     * Set country
     *
     * @param \Admin\SporteventsBundle\Entity\Countries $country
     * @return Teams
     */
    public function setCountry(\Admin\SporteventsBundle\Entity\Countries $country = null)
    {
        $this->country = $country;

        return $this;
    }

    /**
     * Get country
     *
     * @return \Admin\SporteventsBundle\Entity\Countries 
     */
    public function getCountry()
    {
        return $this->country;
    }

    /**
     * Set informationPage
     *
     * @param \Admin\SporteventsBundle\Entity\InformationPages $informationPage
     * @return Teams
     */
    public function setInformationPage(\Admin\SporteventsBundle\Entity\InformationPages $informationPage = null)
    {
        $this->informationPage = $informationPage;

        return $this;
    }

    /**
     * Get informationPage
     *
     * @return \Admin\SporteventsBundle\Entity\InformationPages 
     */
    public function getInformationPage()
    {
        return $this->informationPage;
    }

    /**
     * Set logoImage
     *
     * @param \Admin\SporteventsBundle\Entity\Images $logoImage
     * @return Teams
     */
    public function setLogoImage(\Admin\SporteventsBundle\Entity\Images $logoImage = null)
    {
        $this->logoImage = $logoImage;

        return $this;
    }

    /**
     * Get logoImage
     *
     * @return \Admin\SporteventsBundle\Entity\Images 
     */
    public function getLogoImage()
    {
        return $this->logoImage;
    }

    /**
     * Set sport
     *
     * @param \Admin\SporteventsBundle\Entity\Sports $sport
     * @return Teams
     */
    public function setSport(\Admin\SporteventsBundle\Entity\Sports $sport = null)
    {
        $this->sport = $sport;

        return $this;
    }

    /**
     * Get sport
     *
     * @return \Admin\SporteventsBundle\Entity\Sports 
     */
    public function getSport()
    {
        return $this->sport;
    }

    public function __toString()
    {
        return $this->name;
    }
}

EDIT Countries.php (Entity) 编辑country.php(实体)

namespace Admin\\SporteventsBundle\\Entity; 命名空间Admin \\ SporteventsBundle \\ Entity;

use Doctrine\\ORM\\Mapping as ORM; 使用Doctrine \\ ORM \\ Mapping作为ORM;

/** * Countries * * @ORM\\Table(name="countries", uniqueConstraints={@ORM\\UniqueConstraint(name="uq_countries_name", columns={"name"})}) * @ORM\\Entity / class Countries { / * * @var integer * * @ORM\\Column(name="country_id", type="integer") * @ORM\\Id * @ORM\\GeneratedValue(strategy="SEQUENCE") * @ORM\\SequenceGenerator(sequenceName="countries_country_id_seq", allocationSize=1, initialValue=1) */ private $countryId; / ** *国家* * @ORM \\ Table(name =“ countries”,uniqueConstraints = {@ ORM \\ UniqueConstraint(name =“ uq_countries_name”,column = {“ name”})}))* @ORM \\ Entity / class国家{/ * * @var整数* * @ORM \\ Column(name =“ country_id”,type =“ integer”)* @ORM \\ Id * @ORM \\ GeneratedValue(strategy =“ SEQUENCE”)* @ORM \\ SequenceGenerator(sequenceName =“ countries_country_id_seq”,allocationSize = 1,initialValue = 1)* / private $ countryId;

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



/**
 * Get countryId
 *
 * @return integer 
 */
public function getCountryId()
{
    return $this->countryId;
}

/**
 * Set name
 *
 * @param string $name
 * @return Countries
 */
public function setName($name)
{
    $this->name = $name;

    return $this;
}

/**
 * Get name
 *
 * @return string 
 */
public function getName()
{
    return $this->name;
}

public function __toString()
{
    return $this->name;
}

} }

You need to do {{ team.country.name }} assuming you have set your relationships up properly. 假设您已经正确设置了关系,则需要执行{{ team.country.name }}

Updated to reflect entity code. 更新以反映实体代码。

Yo have mistake in the teams entity at join column annotation. 在联接列注释处,team实体存在错误。 Referencedcolumn generally is id(what's your country primary key). Referencedcolumn通常是id(您的国家/地区的主键)。 Then try to access country like this 然后尝试像这样访问国家

You need to do {{ team.country.name }} in twig assuming you have set your relationships up proper 假设您已经建立了正确的关系,则需要在树枝中执行{{team.country.name}}

This part: 这部分:

/**
 * @var \Admin\SporteventsBundle\Entity\Countries
 *
 * @ORM\ManyToOne(targetEntity="Admin\SporteventsBundle\Entity\Countries")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="country_id", referencedColumnName="country_id")
 * })
 */
private $country;

need to be changed to: 需要更改为:

/**
 * @var \Admin\SporteventsBundle\Entity\Countries
 *
 * @ORM\ManyToOne(targetEntity="Admin\SporteventsBundle\Entity\Countries")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="country_id", referencedColumnName="id")
 * })
 */
private $country;

as referencedColumnName should be id , not country_id 作为referencedColumnName应该是id ,而不是country_id

By doing as above, you will create the relationship properly then in your twig file, you can use: 通过执行上述操作,您将正确创建关系,然后在树枝文件中使用:

{{ team.country.name }}

Hope this help :) 希望这个帮助:)

In the Teams Entity , at the $country field, try using the following to set the relationship: 在“团队实体”的$ country字段中,尝试使用以下命令设置关系:

/**
 * @var \Admin\SporteventsBundle\Entity\Countries
 *
 * @ORM\ManyToOne(targetEntity="Admin\SporteventsBundle\Entity\Countries")
 * @ORM\JoinColumn(name="country_id", referencedColumnName="country_id")
 */
private $country;

and then you can access the name of your country by typing the following in twig: 然后您可以通过在树枝中输入以下内容来访问您所在国家的名称:

{{ team.country.name }}

maybe it's an array , and you must scan it? 也许这是一个数组,您必须对其进行扫描?

 {% for country in team.country %} {{ country.name }} {% endfor %} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM