Utworzona jednostka do przechowywania danych Jestem ciągnąc za pośrednictwem APISymfony2 Doktryna Nierozpoznany pola:
Kiedy próbuję findByOne aby sprawdzić, czy wpis już istnieje, pojawia się błąd mówiący pole jest nie rozpoznany.
Zrobiłem php app/doktrynę konsoli: schema: update --force mogę patrz tabela w moim menedżerem mySQL z prawej nazwy pola „StadiumID” Więc dlaczego nie mogę go znaleźć, gdy doktryna zrobić findByOne();
Moja Entity Class:
<?php
namespace FantasyPro\DataBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Stadium
*
* @ORM\Table("fp_stadium")
* @ORM\Entity(repositoryClass="FantasyPro\DataBundle\Entity\StadiumRepository")
*/
class Stadium
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="StadiumID", type="integer", length=2, nullable=false, unique=true)
*/
private $stadiumID;
/**
* @var string
*
* @ORM\Column(name="Name", type="string", length=100, nullable=false)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="City", type="string", length=50, nullable=false)
*/
private $city;
/**
* @var string
*
* @ORM\Column(name="State", type="string", length=10, nullable=true)
*/
private $state;
/**
* @var string
*
* @ORM\Column(name="Country", type="string", length=2, nullable=false)
*/
private $country;
/**
* @var integer
*
* @ORM\Column(name="Capacity", type="integer", length=32, nullable=true)
*/
private $capacity;
/**
* @var string
*
* @ORM\Column(name="PlayingSurface", type="string", length=50, nullable=true)
*/
private $playingSurface;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set stadiumID
*
* @param integer $stadiumID
* @return Stadium
*/
public function setStadiumID($stadiumID)
{
$this->stadiumID = $stadiumID;
return $this;
}
/**
* Get stadiumID
*
* @return integer
*/
public function getStadiumID()
{
return $this->stadiumID;
}
/**
* Set name
*
* @param string $name
* @return Stadium
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set city
*
* @param string $city
* @return Stadium
*/
public function setCity($city)
{
$this->city = $city;
return $this;
}
/**
* Get city
*
* @return string
*/
public function getCity()
{
return $this->city;
}
/**
* Set state
*
* @param string $state
* @return Stadium
*/
public function setState($state)
{
$this->state = $state;
return $this;
}
/**
* Get state
*
* @return string
*/
public function getState()
{
return $this->state;
}
/**
* Set country
*
* @param string $country
* @return Stadium
*/
public function setCountry($country)
{
$this->country = $country;
return $this;
}
/**
* Get country
*
* @return string
*/
public function getCountry()
{
return $this->country;
}
/**
* Set capacity
*
* @param integer $capacity
* @return Stadium
*/
public function setCapacity($capacity)
{
$this->capacity = $capacity;
return $this;
}
/**
* Get capacity
*
* @return integer
*/
public function getCapacity()
{
return $this->capacity;
}
/**
* Set playingSurface
*
* @param string $playingSurface
* @return Stadium
*/
public function setPlayingSurface($playingSurface)
{
$this->playingSurface = $playingSurface;
return $this;
}
/**
* Get playingSurface
*
* @return string
*/
public function getPlayingSurface()
{
return $this->playingSurface;
}
}
Kod używam aby dodać dane, jeśli nie istnieje i zaktualizować go, jeśli istnieje:
<?php
namespace FantasyPro\DataBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use FantasyPro\DataBundle\Entity\Stadium;
class DefaultController extends Controller
{
public function indexAction($name)
{
return $this->render('DataBundle:Default:index.html.twig', array('name' => $name));
}
public function updateStadiumAction(){
//get list of stadiums
$client = $this->container->get('fantasyapi');
$stadiumData = $client->Stadiums();
//var_dump($stadiumData);
//get the entity manager
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('DataBundle:Stadium');
$log = $stadiumData;
foreach($stadiumData as $stadium){
// Get the current stadium in the list
$criteria = array("StadiumID" =>$stadium['StadiumID']);
var_dump($criteria);
$storedStadium = $repo->FindOneBy($criteria);
if (!$storedStadium) {
/* throw $this->createNotFoundException(
'No product found for id '.$stadium['StadiumID']
);*/
//no stadium exists with the StadiumID passed
//create a new entry
$entry = new Stadium();
$entry->setStadiumID($stadium['StadiumID']);
$entry->setName($stadium['Name']);
$entry->setCity($stadium['City']);
$entry->setState($stadium['State']);
$entry->setCountry($stadium['Country']);
$entry->setCapacity($stadium['Capacity']);
$entry->setPlayingSurface($stadium['PlayingSurface']);
$em->persist($entry);
$log .= 'Added New Stadium: '.$stadium['StadiumID'].' : '.$stadium['Name'].'<br>';
}else{
$storedStadium->setStadiumID($stadium['StadiumID']);
$storedStadium->setName($stadium['Name']);
$storedStadium->setCity($stadium['City']);
$storedStadium->setState($stadium['State']);
$storedStadium->setCountry($stadium['Country']);
$storedStadium->setCapacity($stadium['Capacity']);
$storedStadium->setPlayingSurface($stadium['PlayingSurface']);
$em->persist($storedStadium);
$log .= 'Updated Stadium: '.$stadium['StadiumID'].' : '.$stadium['Name'].'<br>';
}
}
//$em->flush();
return $this->render('DataBundle:Default:index.html.twig', array('log' => $log));
}
}
dzięki za wielką odpowiedzi, są tam wszelkie konwencje nazewnictwa, które powinny być używane w nazwach kolumn, czy dobrze jest zachować nazwę kolumny tak samo jak nazwa właściwości w liście kamer? –
z wielką przyjemnością! Jeśli nie podasz nazwy kolumny, doktryna automatycznie przeniesie nazwę twojej własności (jeśli jest w kamelce) do sprawy węża. Uważam, że jest to bardzo jasne, gdy używam bazy danych SQL i jest to najlepsza praktyka, ponieważ zapewnia spójność. Wszystko zależy jednak od logiki biznesowej i od tego, kto będzie obsługiwał bazę danych. Również niektóre cechy, takie jak Blameable, nazywają kolumny w przypadku wielbłąda (createdBy, updatedBy). Możesz również skonfigurować strategię nazewnictwa dla doktryny dla swoich podmiotów: https://coderwall.com/p/kj1reg/implementing-a-doctrine2-naming-strategy-in-symfony2 – anegrea