Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]Cannot define NULL as part of query when defining 'limit'.
Forum PHP.pl > Forum > PHP > Frameworki
mareknn
witam,
przerobilem mniej wiecej calego jobeeta i teraz chcialem na jego podstawie sam cos zrobic, na razie tylko troche zmniejac i jestem w 6 dniu przy Limitowaniu Rezultatow
http://www.symfony-project.org/jobeet/1_4/Doctrine/en/06

i jak wpisze
  1. public function getActiveJobs($max = 10)
  2. {
  3. $q = Doctrine_Query::create()
  4. ->from('JobeetJob j')
  5. ->where('j.category_id = ?', $this->getId())
  6. ->limit($max);
  7.  
  8. return Doctrine_Core::getTable('JobeetJob')->getActiveJobs($q);
  9. }


to wywala mi blad

Kod
500 | Internal Server Error | Doctrine_Query_Exception
Cannot define NULL as part of query when defining 'limit'.
stack trace

    * at ()
      in SF_ROOT_DIR\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Query\Abstract.php line 2047]

      2044.     {
      2045.         // We should prevent nullable query parts
      2046.         if ($queryPart === null) {
      2047.             throw new Doctrine_Query_Exception('Cannot define NULL as part of query when defining \'' . $queryPartName . '\'.');
      2048.         }
      2049.
      2050.         if ($append) {

jesli z nawiasow wywale $max = 10 i wpisze w limit samo 10 bez zmiennej to strona sie wyswietla dobrze, ale potem juz sa problemy z tym limotowaniem...

jak to mozna naprawic? jak robilem slowo w slowo z jobeetem to dzialalo, a jak pozmienialem tylko nazwy zmiennych to mam ten blad...

pozdrawiam!
destroyerr
Czy kod który nam pokazałeś jest dokładnie taki sam jak ten, który się wysypuje? Sam piszesz, że zmieniałeś nazwy zmiennych, więc może i ta zmienna też powinna nazywać się inaczej.
mareknn
kod z bledami jest dokladnie taki jak pokazuje. tamten skopiowalem z jobeeta. do tego kroku nie bylo zadnego problemu ze zmiennymi i dzialalo ok, a przy tym wywala mi ten blad

Cytat
Cannot define NULL as part of query when defining 'limit'

cos jest z tym limitem zle, bo jak usune go z funkcji i zamienie tak:

Cytat
public function getActiveJobs()
{
$q = Doctrine_Query::create()
->from('JobeetJob j')
->where('j.category_id = ?', $this->getId())
->limit(10);

return Doctrine_Core::getTable('JobeetJob')->getActiveJobs($q);
}

to dziala dobrze, nawet limituje, ale potem jak juz robie kategorie to w kategoriach w ogole nie ma limitu...
Gribo
a jak wywołujesz funkcję getActiveJobs() może jako parametr wprowadzasz zmienną o wartości null i wtedy ci się pieprzy ?
mareknn
nie wiem co jest, jak robie wedlug jobeeta to dziala bez problemu, a jak zmieniam zmienne to jest problem...

Quadina
  1. public function getActiveJobs($max=10)
  2. {
  3. $q = Doctrine_Query::create()
  4. ->from('JobeetJob j')
  5. ->where('j.category_id = ?', $this->getId())
  6. ->limit($max);
  7.  
  8. return Doctrine_Core::getTable('JobeetJob')->getActiveJobs($q);
  9. }


zobacz co wykonujesz w return! Wywołujesz rekurencyjnie tę samą funkcję którą własnie wykonujesz! Zatem w drugim wywołaniu podajesz jej za parametr obiekt Doctrine_query przekazany przy pomocy zmiennej $q. Funkcja limit nie rozumie co to obiekt i sobie go nulluje i potem wywala błąd. W returnie powinieneś mieć:
  1. return $q->execute();

Przyjrzyj się dokładnie temu co jest w lekcji 6.
halfdan
Cytat(Quadina @ 9.02.2011, 11:16:26 ) *
  1. public function getActiveJobs($max=10)
  2. {
  3. $q = Doctrine_Query::create()
  4. ->from('JobeetJob j')
  5. ->where('j.category_id = ?', $this->getId())
  6. ->limit($max);
  7.  
  8. return Doctrine_Core::getTable('JobeetJob')->getActiveJobs($q);
  9. }


zobacz co wykonujesz w return! Wywołujesz rekurencyjnie tę samą funkcję którą własnie wykonujesz! Zatem w drugim wywołaniu podajesz jej za parametr obiekt Doctrine_query przekazany przy pomocy zmiennej $q. Funkcja limit nie rozumie co to obiekt i sobie go nulluje i potem wywala błąd. W returnie powinieneś mieć:
  1. return $q->execute();

Przyjrzyj się dokładnie temu co jest w lekcji 6.


To nie prawda, w returnie powinno być to, co jest. Tylko funkcja powinna iść do innej klasy. Sprawdź, czy nie pokiełbasiłeś.
Funkcja o sygnaturce:
  1. public function getActiveJobs(Doctrine_Query $q = null)

musi iść do JobeetCategoryTable, a funkcja:
  1. public function getActiveJobs($max = 10)

musi iść do JobeetCategory.

Mogłeś też źle wpisać nazwę zmiennej:
  1. max_jobs_on_homepage

w pliku app.yml.
Ta zmienna ma się nazywać max_jobs_on_homepage a nie app_max_jobs_on_homepage
Za to, żeby ją pobrać musimy użyć:
  1. sfConfig::get('app_max_jobs_on_homepage')

Jeśli to o tę nazwę chodzi, to pamiętaj, że jak zmienisz nazwę w pliku konfiguracyjnym yml, a masz włączone cachowanie, to powinieneś opróżnić cache, bo inaczej Symfony nie zauważy zmian.
Powodzenia:)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.