Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: Symfony 2.0 Problem z relacjami

Witam,
mam takie 2 encje:

class Languages
{
/**
* @var smallint $id
*
* @ORM\Column(name="id", type="smallint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;

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

/**
* @var string $short
*
* @ORM\Column(name="short", type="string", length=2)
* @ORM\JoinColumn(name="short", referencedColumnName="lang")
*/
private $short;

/**
*
* @ORM\OneToMany(targetEntity="Pages", mappedBy="lang")
*/
private $pages;

public function __construct()
{
$this->pages = new \Doctrine\Common\Collections\ArrayCollection();
}
....



class Pages
{
/**
* @var smallint $id
*
* @ORM\Column(name="id", type="smallint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;

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

/**
*
* @ORM\ManyToOne(targetEntity="Languages", inversedBy="pages")
* @ORM\JoinColumn(name="lang", referencedColumnName="short")
*/
private $lang;
...


Przy próbie dodania strony dostaje błąd:

Notice: Undefined index: short in C:\xampp\htdocs\magisterska\symfony\vendor\doctrine\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php line 511


Chodzi mi o ta aby dodając stronę do metody setLang podać obiekt języka i to zapisać.

Proszę o radę.
z góry dziękuję.
Pozdrawiam.
Tomasz Bińkowski

Tomasz Bińkowski Programista PHP

Temat: Symfony 2.0 Problem z relacjami

Do tłumaczeń lepiej użyć:

https://packagist.org/packages/gedmo/doctrine-extensions
https://packagist.org/packages/a2lix/translation-form-b...

A w tym kodzie nie potrzebnie masz w Languages:
@ORM\JoinColumn(name="short", referencedColumnName="lang")
Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: Symfony 2.0 Problem z relacjami

Dziękuję, mam jeszcze jedno pytanie:
W jaki sposób poradzić sobie z polem datetime/date w Doctrine ?
Robię tak:

/**
*
* @ORM\Column(name="creation_date", type="datetime")
*/
private $creationDate;

i mam Call to a member function format().
Nic nie zmieniałem. Wydaje się to banalne a jednak :(
Znalazłem coś tutaj https://github.com/l3pp4rd/DoctrineExtensions/blob/mast...
ale chyba nie tak to wykonuje bo nadal ten sam błąd. W jaki sposób wgrać odpowiednio pliki aby dzialalo to pole ?

Pozdrawiam
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: Symfony 2.0 Problem z relacjami

Krzysztof Z.:
Znalazłem coś tutaj https://github.com/l3pp4rd/DoctrineExtensions/blob/mast...
ale chyba nie tak to wykonuje bo nadal ten sam błąd. W jaki sposób wgrać odpowiednio pliki aby dzialalo to pole ?
Dodaj w kodzie / klasie encji:
use Gedmo\Mapping\Annotation as Gedmo;
Zaś do właściwości dopisz:
@Gedmo\Timestampable(on="create")
Właściwość będzie zatem wyglądać tak:
/**
*
* @ORM\Column(name="creation_date", type="datetime")
* @Gedmo\Timestampable(on="create")
*/
private $creationDate;
Dzięki temu dla każdego nowego obiektu ta właściwość będzie uzupełniania bieżącą / aktualną datą.
Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: Symfony 2.0 Problem z relacjami

Krzysztof N.:
Krzysztof Z.:
Znalazłem coś tutaj https://github.com/l3pp4rd/DoctrineExtensions/blob/mast...
ale chyba nie tak to wykonuje bo nadal ten sam błąd. W jaki sposób wgrać odpowiednio pliki aby dzialalo to pole ?
Dodaj w kodzie / klasie encji:
use Gedmo\Mapping\Annotation as Gedmo;
Zaś do właściwości dopisz:
@Gedmo\Timestampable(on="create")
Właściwość będzie zatem wyglądać tak:
/**
*
* @ORM\Column(name="creation_date", type="datetime")
* @Gedmo\Timestampable(on="create")
*/
private $creationDate;
Dzięki temu dla każdego nowego obiektu ta właściwość będzie uzupełniania bieżącą / aktualną datą.

Tak dokładnie robie, i działa dla pola typu timestamp a nie dla date/time. Najwidoczniej jakiś błąd.
Pozdrawiam
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: Symfony 2.0 Problem z relacjami

Krzysztof Z.:
Tak dokładnie robie, i działa dla pola typu timestamp a nie dla date/time. Najwidoczniej jakiś błąd.
Dziwne, u mnie działa ;) Zaś na tak serio to też dziwne, ponieważ dokumentacja podaje przykład z typem datetime:
/**
* @var datetime $created
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetime")
*/
private $created;
Przeszukaj jeszcze dokumentację, zapytaj Wujka Google i / lub uruchom debugger i sprawdź sam co jest przyczyną.
Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: Symfony 2.0 Problem z relacjami

może to różnica w wersjach. Znalazłem, że inni też mają podobny problem. Przestawiłem na timestamp i działa. Jak będe miał chwile to się przejrzę co może być nie tak. Dzięki za pomoc.
Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: Symfony 2.0 Problem z relacjami

Jeszcze mam jedno techniczne pytanie ;)

Używam translatable do tłumaczeń podstron na różne języki.
I moje pytanie:
W bazie zawsze muszą tworzyć się dodatkowe rekordy w tabeli ext_translations?
Nie zawsze przecież strona musi być przetłumaczona i chciałbym różne slugi dla języków, nawet jeśli ustawie żeby slug zapisywać to dostaje nowy ale nie można po nim wyszukać. Chyba że robię coś nie tak.

Nie lepiej (i wydaje mi się optymalnej) zrobić w tabeli ze stronami pole locale i po nim rozróżniać język bez użycia translatable i wtedy unikamy redundancji?

Proszę o opinie.
Pozdrawiam
Tomasz Bińkowski

Tomasz Bińkowski Programista PHP

Temat: Symfony 2.0 Problem z relacjami

W symfony 2.1 usprawqnili ten mechanizm i możesz subie użyć takiego bundla:

https://github.com/a2lix/TranslationFormBundle
https://github.com/a2lix/DemoTranslationBundle
Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: Symfony 2.0 Problem z relacjami

Tomasz Bińkowski:
W symfony 2.1 usprawqnili ten mechanizm i możesz subie użyć takiego bundla:

https://github.com/a2lix/TranslationFormBundle
https://github.com/a2lix/DemoTranslationBundle

Ciekawe rozwiązanie. Muszę to przetestować.
Mam jeszcze jeden problem. Chodzi mi o akcję w stylu "before" z SF 1.4. Jak w wersji 2 poprawnie to wykonać. Głównie chodzi mi o to abym mógł we wszystkich bądź wybranych kontrolerach pakietu przed ich startem załadować np. ustawienia ect.

Czytałem o mechanizmie service ale nie wiem czy do końca dobrze myśle.
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: Symfony 2.0 Problem z relacjami

Krzysztof Z.:
Mam jeszcze jeden problem. Chodzi mi o akcję w stylu "before" z SF 1.4. Jak w wersji 2 poprawnie to wykonać. Głównie chodzi mi o to abym mógł we wszystkich bądź wybranych kontrolerach pakietu przed ich startem załadować np. ustawienia ect.
Zerknij tutaj:
-> Symfony.com: How to setup before and after Filters
-> Google.pl: symfony2 before action
Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: Symfony 2.0 Problem z relacjami

to jednak dobrze myślałem ;)
dzięki.
Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: Symfony 2.0 Problem z relacjami

Jeszcze małe pytanko odnośnie tego dodatku https://github.com/l3pp4rd/DoctrineExtensions/blob/mast...

Czy automatyczna generacja path nie działa dla nested tree i muszę sam to oprogramować, czy się mylę. Chodzi mi o sluga w postaci hierarchii stron.

Pozdrawiam

konto usunięte

Temat: Symfony 2.0 Problem z relacjami

Krzysztof Z.:
Jeszcze małe pytanko odnośnie tego dodatku https://github.com/l3pp4rd/DoctrineExtensions/blob/mast...

Czy automatyczna generacja path nie działa dla nested tree i muszę sam to oprogramować, czy się mylę. Chodzi mi o sluga w postaci hierarchii stron.

Pozdrawiam


a sprawdzałeś dalszą część dokumentacji?
konkretnie https://github.com/l3pp4rd/DoctrineExtensions/blob/mast...

nie wiem czy dobrze zrozumiałem pytanie ale w dokumentacji jest napisane że listener od behaviour'a sluggable musi być przed tym od tree. więc jeśli coś nie działa to wynika to z niewłaściwej kaskady wowołań.
Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: Symfony 2.0 Problem z relacjami

Witam ponownie ;)

Mam dwie encje zapisywane w bazie danych w relacji 1 do n

Encja "n" ma metodę postRemove która robi coś po usunięciu.
Encja 1 ma nadana właściwość onDelete="CASCADE"

Przy usuwaniu kaskadowym rekordy powiązane usuwają się z bazy jednak nie jest wywoływana metoda PostDelete z klasy n.

Czy robię coś źle, a może trzeba to samemu zaprogramować?

Proszę o sugestie.

Pozdrawiam
Konrad Przybylski

Konrad Przybylski Myślący programista
PHP

Temat: Symfony 2.0 Problem z relacjami

Z tego co mi wiadomo to w Doctrine są dwa sposoby radzenia sobie z "kaskadowością".
Pierwszy z nich, z którego wydaje mi się że korzystasz, to poleganie na CASCADE w bazie danych. Wtedy postDelete na encji "n" nie jest wywoływane przez Doctrine, bo usunięcie odbywa się na poziomie bazy danych z pominięciem Doctrine.
Drugą opcją jest skorzystanie z opcji cascade w Doctrine. Minusem tego sposobu jest to, że te obiekty, które powinny być usunięte przetrzymywane są w pamięci i usuwane jedna po drugiej przez Doctrine. Ale już w tym przypadku Twoja funkcja postDelete zostanie wykonana.

Następna dyskusja:

Problem z uruchomieniem sym...




Wyślij zaproszenie do