#doctrine #symfony #php

Mam takie coś:

/**
*
* @ORM\PreRemove
*/
public function groupSizePreRemove()
{
$this->getCosting()->resetOpenBandOppositeRateType();
}

/**
* @ORM\PostUpdate
*/
public function groupSizePostUpdate()
{
$this->getCosting()->resetOpenBandOppositeRateType();
}

potem w kontrolerze wołane jest persist i flush przy remove oraz tylko flush przy update.

Pytanie: Dlaczego zmiana w innym entity (costing) zapisuje się do bazy przy preRemove ale przy preUpdate lub postUpdate jest ignorowana?
@gajowy_marucha: to takie serialize-unserialize dla ORM, w okolicach 20 minuty jakoś o tym mówi. Źle się wyraziłem, używa się tego na encjach, ale na 99% przypadków można i powinno się uniknąć. Z własnego doświadczenia i obserwacji rozwoju innych programistów sprawa wygląda tak: nie znasz eventów -> poznajesz eventy -> "ej to zajebiste użyjmy tego do operacji przed usunięciem" -> "dorzućmy jeszcze preupdate" -> "ej #!$%@? osochozi, czemu to się zmienia/nie zmienia"
groupSizePreRemove()


@gajowy_marucha: Unikaj w encji nazw typu PreRemove – nie ma znaczenia, że odpalasz to akurat przed usunięciem. Możesz przecież normalnie „ręcznie” odpalić sobie tę metodę z usługi czy kontrolera, więc wystarczy w nazwie samo groupSize(), bez wskazywania „kiedy”.

groupSizePreRemove i groupSizePostUpdate


Te dwie metody chyba mogą być zamienione w jedną – po prostu użyj dwóch annotacji na jednej metodzie?

Używam listeners, nawet teraz przenoszę to do mojego EntityListener. Problem
https://gist.github.com/miedzwin/1472ebc3194c9bb5d630

Dlaczego $this->getSQL() w UserRepository zwraca mi taki SQL:

SELECT f0_.username AS username_0, f0_.username_canonical AS username_canonical_1, f0_.email AS email_2, f0_.email_canonical AS email_canonical_3, f0_.enabled AS enabled_4, f0_.salt AS salt_5, f0_.password AS password_6, f0_.last_login AS last_login_7, f0_.locked AS locked_8, f0_.expired AS expired_9, f0_.expires_at AS expires_at_10, f0_.confirmation_token AS confirmation_token_11, f0_.password_requested_at AS password_requested_at_12, f0_.roles AS roles_13, f0_.credentials_expired AS credentials_expired_14, f0_.credentials_expire_at AS credentials_expire_at_15, f0_.id AS id_16, f0_.facebook_id AS facebook_id_17, f0_.first_name AS first_name_18, f0_.created AS created_19, f0_.updated AS
@mariecziek: nie. Nie buduje się obecnie SQLu z parametrami. Robi to już driver sam, PDO który jest zakorzeniony w samym silniku PHP.

Driver sam w miejsca pytajników stawia parametry. Dlaczego? Bo spora część programistów to debile i nie zważają na problemy z SQL injection, tak więc ogólnie jest zakazane wstawiać parametry do SQL'a 0 - a wstawiać parametry do sqla zostawia się profesjonaliście - driverowi.
@incognito_man: okej, a jak w subquery chce się odwołać do query aliasu wyżej ? może napiszę o co mi chodzi - chcę wyświetlić z bazy takie rekordy, dla których wartość jakiegoś pola powtarza się więcej niż dwa razy
#php #doctrine #symfony2
Piszę aktualnie moduł w symfony który właściwie jest osobną aplikacją - ma gadać ze starym systemem. Stary system to stare php nawet nie nazwałbym tego proceduranlym :)
Pytanie jak się zabrać za bazę - chciałem robić osobną ale nie wiem jak potem wyglądać będzie praca na dwóch entity managerach? Jak robić joiny? Czy może lepiej dać sobie spokój i dołączać nowe tabele do isntniejącej bazy (ale inne nazewnictwo tabel
@gajowy_marucha: Dołączaj do obecnej bazy. Walić nazwy tabelek – Doctrine'owe encje nie muszą nazywać się tak samo.

Możesz mieć tabelkę dupa_cycki_komenty_do_artoof i encję ArticleComment – więc w czym problem? Z czasem może bazkę też poprawisz, ale na tym etapie interesuje Cię model.
PHPconPL 2015: agenda gotowa, rekordowa liczba uczestników

m.in. będzie można posłuchać prelekcji na takie tematy:

- Jak wciągnąć eksperta domenowego w wir modelowania – lingwistyczne i wizualne techniki #ddd
- Code review – jak krytykować
- #doctrine ORM Good Practices and Tricks
- PHP7 w praktyce
- Why Your Test Suite Sucks
- #mysql under the siege

a także wziąć udział w warsztatach:

- Praktyczne wprowadzenie do Test Driven Development
- Jak
normanos - PHPconPL 2015: agenda gotowa, rekordowa liczba uczestników

m.in. będzie...

źródło: comment_BrQuXfBpuD4tlg2XwNoIybYdC7fLBwcc.jpg

Pobierz
#symfony #symfony2 #php #doctrine #mysql
Mam dwie encję: Post i Category. Post zawiera pole $category, a Category pole $posts - czyli typowa relacja one to many.
Chciałbym teraz pobrać post z powiązanym obiektem kategorii w jednym zapytaniu. W tym celu używam takiej funkcji umiejscowionej w PostRepository. Niestety ten DQL w połączeniu z kluczami obcymi generuje nieskończenie zagnieżdżone zapytanie ( ͡° ʖ̯ ͡°)
Jak powinienem to zrobić w prawidłowy
#php #doctrine #symfony2

Mam takie cos, wszystkko dziala fajnie formularz z zagniezdzonym formularzem, po submit ladnie pokazuje obiekt Foo z dwoma przypisanymi Collections bestbars i worstbars. Problem pojawia sie przy probie persist, blad jest taki ze kolekcje sa wstawiane do bazy bez id rodzica.

Podejrzewam ze problem tkwi w tym ze ManyToOne nie ma inversedBy (no bo nie wiem co tam mialoby byc).

Da sie jakos fajnie to rozwiazac?

class
@gajowy_marucha: w doctrine również masz dziedziczenie, tam się dzieje to po abstrakcyjnym typie, który jest podstawą do zbudowania tabeli (nie po Eloquencie, a po "abstrakcyjnej" encji), a następnie dyskryminator doktrynowy sprawia (na podstawie dodatkowej kolumny w tabeli), że hydruje się obiekt odpowiedniej klasy, wedle zadanej wcześniej konfiguracji. Jedna klasa dziedzicząca może posiadać jedną relację, a druga inną. "Fizycznie" pojawią się w tabeli dwie kolumny, ale tylko jedna z nich będzie wykorzystywana
#symfony #symfony2
mam pytanie o #doctrine... wciąż jeszcze nie ogarniam relacji #manytoone czy #onetomany... dlaczego chciałem was prosić o pomoc :)

Powiedzmy że mam trzy encje, żeby to uprościć posłużę się przykładem z komunikacji miejskiej:
Encje:
- busStop
- timeTable
- arrivals

Relacje powinny być takie:
busStop może mieć wiele timeTable
timeTable może mieć jednen busStop oraz wiele arrivals
arrivals może mieć jeden timeTable
Czy ktoś mógłby podać przykład jak
@qwelukasz: OK. Ale masz źle znormalizowany schemat. Dochodzi do redundancji danych.
Dodając do tego linie autobusowe wygląda to mniej więcej tak: Arrivals(BusStopId, LineId, Time)
I teraz mając BusStopId możesz sprawdzić jakie linie tam idą i o której godzinie ( informacje z tabliczki ) a czas jest w jednym miejscu.
#symfony #symfony2 #doctrine #mysql #postgresql

Taka sprawa... chcę użyć innego niż domyślnego (public) schematu z #pgsql.
Doczytałem, że można to zrobić przez annotacje @Table(schema="schema") ale to jest dosyć "statyczne" rozwiązanie i byłoby lepiej/prościej wprowadzić ten parametr jako parametr w parameters.yml niźli dla każdej encji osobno... (Annotacja w encji mogłaby nadpisywać dla danej encji schemat).
Jak to zrobić i dlaczego do tej pory nikt z #sf2 tego nie wprowadził?
@Jurigag:

1. Jak często chcesz te dane wyciągać? Im częściej, tym szybciej to musi działać. Ale jeśli dosyć rzadko to nie ma znaczenia i dowolna metoda będzie ok – nawet jeśli nie będzie za szybka.
2. Jak dużo musisz tych danych wyciągać? Bo jeśli bardzo dużo (w tysiącach) to jednak wypada się zastanowić nad wydajnością. Jeśli mniej, to znów: można olać – dowolna metoda będzie wystarczająco szybka.
3. Zrób dwa zapytania:
Okej, Mirki i Mirkówny będzie trochę #chwalesie trochę #januszewebdevu i #januszewebdesignu tagu programowanie jednak nie użyję bo to tylko PHP ( ͡° ͜ʖ ͡°) Będzie nawet trochę #rozdajo
Otóż po tym przydługim wstępie chciałbym zaprezentować mirko maszynę losującą w moim wykonaniu (uwaga dla #tylkonocny wypala oczy więc proszę ostrożnie). Tak wiem że jest już #mirkorandom ale stwierdziłem że mając długą przerwę przed 2gim stopniem studiów i odrobinę chęci
Mam taką encję Seansów:
https://gist.github.com/anonymous/8e88d6acac0816b05468
i rozszerzam repozytorium w ten sposób
https://gist.github.com/anonymous/79381f0ac60c7e89bef8
Koniec końców otrzymuję wyjątek:

Key "movie" for array with keys "0, reservedTickets" does not exist in src/WowStudio/Bundle/CinemaSystemBundle/Resources/views/Default/index.html.twig at line 14

W jaki sposób zmapować dodatkową kolumnę którą wygenerowałem? Ktoś podpowie co robię źle? ;)
#symfony2 #doctrine #php
@ghost1511: Doctrine korzysta z refleksji, żeby ustalić wartości pól – możesz mieć same gettery i brak setterów – Doctrine sobie poradzi.

Jaka jest więc zasada? Robisz gettery/settery tylko i wyłącznie te, z których faktycznie chcesz korzystać.

Nie będziesz ustalać ID? Nie rób settera. Masz powiedzmy $firstName i $lastName, ale pobierać będziesz tylko połączoną nazwę? Zrób getFullName() i olej gettery do pojedynczych pól.

Ogólnie framework ma dawać możliwości, a nie ograniczać –