Yii Framework Forum: Szukanie Id Spełniających Kryteria - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Szukanie Id Spełniających Kryteria Rate Topic: -----

#1 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 16 October 2013 - 01:47 AM

Witam. Widziałem że wyszukiwanie można zrobić w CGridView podając dataprovider=>$model->search() i filter=>$model, lecz ja chciałbym uzyskać coś podobnego tylko bez CGridView. Dodatkowo chciałbym , aby nie wyszukiwało i wyplowało masy danych, lecz same id. Jak to uzyskać? Nadpisać metodę search w modelu?
0

#2 User is offline   .viktor. 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 25-August 10
  • Location:Sokołów Podlaski, Poland

Posted 16 October 2013 - 02:07 AM

Witam
Możesz zrobić tak jak pisałeś, możesz napisać zwykłe zapytanie SQL i wynik będący tablicą ładujesz do obiektu http://www.yiiframew...rayDataProvider i zwracasz jako wynik funcji. Metoda search() zwraca obiekt CActiveDataProvider, który zawiera dane w postaci aktywnych rekordów, więc tu będzie analogicznie. Oba obiekty dziedziczą z tegj samej klasy i mają taką samą obłsugę w widzetach typu CgridView i innych.
0

#3 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 16 October 2013 - 02:42 AM

Trochę nie zrozumiałem twojej odpowiedzi. Chcę korzystać z widoku _search wygenerowanego przez CRUD i otrzymywać tylko tablice która zawiera same 'id' użytkowników spełniających kryteria.

Mam takie coś w modelu:
public function search() {
$criteria = new CDbCriteria;
$criteria->select='id';
...
$criteria->compare('username', $this->username, true);
...
return $criteria;
}


W widoku:
$x=User::model()->findAll($model->search());
var_dump($x)


I teraz wywala to pełno danych, a nie same id. Dodatkowo chciałbym zapytać czy takie coś w widoku nie łamie wzorca MVC? Bo nie wiem za bardzo jak to wrzucić w kontroler by działało
0

#4 User is offline   mirunho 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 170
  • Joined: 19-December 12
  • Location:Gdansk, Poland

Posted 16 October 2013 - 08:59 AM

Dlaczego akurat metoda search() ? Ta metoda jest po to zeby uzywac aktywnego rekordu i wypluc dane wlasnie w tym formacie, Ty jak rozumiem chcesz pobrac proste dane z bazy wiec po to robic AR ?
Tak kazde wrzucenie tego typu logiki do widoku sprawi ze lamiesz wzorzec MVC. Mysle ze latwiej byloby Ci napisac jaki masz problem i bysmy zaproponowali rozwiazanie opytmalne a nie opierajace sie na metodzie search. To jak przerobienie porsche na malucha, da sie ale po co ?
0

#5 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 16 October 2013 - 09:29 AM

Ok to od początku. Mam funkcję sendMessage() która wysyła wiadomość do użytkowników o id podanych w parametrze w postaci tablicy. Chcę, aby admin miał możliwość wyszukać sobie użytkowników o danych kryteriach i do nich wysłać wiadomość. W tym celu chciałbym użyć widoku _search wygenerowanego przez crud'a.

Mam nadzieję że teraz wszystko jasne i że uda wam się mi coś podpowiedzieć

P.s metody takie jak sendMessage() powinny byc w kontrolerze czy modelu?
0

#6 User is offline   mirunho 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 170
  • Joined: 19-December 12
  • Location:Gdansk, Poland

Posted 17 October 2013 - 01:44 AM

Ok, teraz trochę bardziej rozumiem o co chodzi i mam nadzieję że będę w stanie pomóc.
Jednym słowem potrzebujesz zwykłego array'a ale chcesz użyc CDbCriteria dla zapytania o konkretne rekordy.
Prosty przykład:
$criteria=new CDbCriteria;
$criteria->select='title';  // wybierz tylko kolumnę 'title' 
$criteria->condition='postID=:postID';
$criteria->params=array(':postID'=>10);
$post=Post::model()->findAll($criteria);

i wtedy masz obiekt który musisz zmienić na array'a np.
http://www.yiiframew...__1#entry199571
Tam masz fajna metodę która pozwoli Ci to zrobić. Mam nadzieje ze nakreslilem jakis obraz w razie czego pytaj jak cos jest nie jasne.
sendMessage moze byc w kontrolerze bo rozumiem ze bedziesz to ajaxem lub jakos inaczej wołał, ale te metody które ja wrzuciłem powinny już bardziej znaleźć sie w modelu i kontroler powinien tylko o nie pytac.
Pozdrawiam,
1

#7 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 18 October 2013 - 08:18 AM

@mirunho Oto mi chodziło, dzięki.

Zabrałem się za poprawianie kodu, gdyż wszystko co dotychczas robiłem było jakby strukturalne. Wszystko siedziało w kontrolerach, bez jakichkolwiek dodatkowych metod. Na pierwszy ogień poszły wiadomości i już mam problem, a mianowicie:
Fatal error: Using $this when not in object contex

W kontrolerze mam coś takiego:
public function actionView($id) {
   $model=Message::model()->user()->findByPk($id);
   if($model->receiver_flag=='0') $model->saveAsRead();
   $this->render('view', array('model' => $model)));    
}

A w modelu Message:
public static function saveAsRead() //zmiana wiadomosci na przeczytana
{
   if($this->receiver_flag=='0') 
   {
      $this->receiver_flag='1'; 
      $this->readed_time=new CDbExpression('NOW()');
      $this->save(false); 
      return true;
   }
   return false;
}

Widzę że ten $this jest źle użyty, ale tutaj: http://www.yiiframew...l/comment.admin jakoś działa, więc co jest grane? A i czy ten kod co wstawiłem już można nazwać zgodnym z MVC?
0

#8 User is offline   redguy 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 822
  • Joined: 02-July 10
  • Location:Central Poland

Posted 21 October 2013 - 05:41 AM

View Postandrzej1_1, on 18 October 2013 - 08:18 AM, said:

...
A w modelu Message:
public static function saveAsRead() //zmiana wiadomosci na przeczytana
{
   if($this->receiver_flag=='0') 
   {
      $this->receiver_flag='1'; 
      $this->readed_time=new CDbExpression('NOW()');
      $this->save(false); 
      return true;
   }
   return false;
}

Widzę że ten $this jest źle użyty, ale tutaj: http://www.yiiframew...l/comment.admin jakoś działa, więc co jest grane? A i czy ten kod co wstawiłem już można nazwać zgodnym z MVC?

w metodzie zadeklarowanej jako "static" nie można się odwoływać do wskaźnika "$this". Ponieważ jednak i tak w akcji metoda nie jest wywoływana statycznie tylko w kontekście instancji obiektu, a treść metody nie sugeruje żeby to miała być faktycznie metoda statyczna - wystarczy, że usuniesz "static" z deklaracji metody i powinno zadziałać.

public function saveAsRead() //zmiana wiadomosci na przeczytana
{
   if($this->receiver_flag=='0') 
   {
      $this->receiver_flag='1'; 
      $this->readed_time=new CDbExpression('NOW()');
      $this->save(false); 
      return true;
   }
   return false;
}

red
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users