Yii Framework Forum: Activedataprovider Join - Yii Framework Forum

Jump to content

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

Activedataprovider Join Rate Topic: -----

#1 User is offline   gaunt 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 07-March 14

Posted 07 March 2014 - 10:53 AM

Hi
zunächst mal, ich bin kompletter Yii Neuling!

Was habe ich:
Eine Tabelle mit Servern(one) und eine zweite mit Patches(many).

Über den Code generator habe ich für beides eine Anzeige gebaut mit den ganzen Crud Funktionen. Klappt.
In die Patchanzeige habe ich über die Relations(viele) in den ActiveDataProvider den Namen der Machine(eine) hinzugefügt und im GridView angezeigt. Auch Sortieren und suchen klappt.

Jetzt würde ich gerne zu den Maschinen anzeigen, ob es einen Security Patch gibt. Und zwar den mit der höchsten ID. Als select ist das ja in sekunden geschrieben. Aber wie geht man hier bei Yii vor?

Ich tue mich im Moment etwas schwer in dem ganze Wust aus Spezial Tutorials mit Sonderfällen diesen eigentlich simplen Fall zu finden.
Geht das überhaupt über Active Record und die Beziehungen? Oder muss ich erst die Liste der Maschinen ziehen und dann von Hand den passenden Patch suchen? Dann habe ich aber keinen ActiveRecord mehr, wie übergebe ich das dann an die GridView?
Könnte bitte mal einer Wegweiser spielen...

In Patchlist
return array(
   'machine' => array(self::BELONGS_TO, 'Machine', 'machine_id'),
);

In Machine
return array(
   'patchlists' => array(self::HAS_MANY, 'Patchlist', 'machine_id'),
);

0

#2 User is offline   guaruja 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 68
  • Joined: 10-March 12

Posted 08 March 2014 - 08:35 AM

Quote

Jetzt würde ich gerne zu den Maschinen anzeigen, ob es einen Security Patch gibt. Und zwar den mit der höchsten ID. Als select ist das ja in sekunden geschrieben. Aber wie geht man hier bei Yii vor?


Eine (von div. Möglichkeiten) wäre die "patchlists" relation um eine order by klausel zu erweitern (id DESC)
Dann könntest du immer das erste Element [0] in deinem GridView ausgeben (um dies zu realiseren könnstest du die Ausgabefunktion in deinem Controller oder Model definieren oder gleich als anony. Funktion direkt in der GridView Definition)
0

#3 User is offline   Jonas 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 18-May 11
  • Location:Switzerland

Posted 16 May 2014 - 10:24 AM

Du könntest im Model Machine (oder Server?) ein neues Attribut erstellen, was ungefähr so aussehen könnte:

public function getLatestPatch(){

return Patchlist::model()->find(array(
   'condition'=>'server_id = (SELECT max(number) FROM patchlist WHERE server_id = '.$this->server_id.')'
));

}


Also die Abfrage geht sicher eleganter, aber es geht ja ums Prinzip. :)
My Blog: jonaszumkehr.ch
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