Yii Framework Forum: Relation Abfrage - Yii Framework Forum

Jump to content

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

Relation Abfrage Rate Topic: -----

#1 User is offline   beatcode 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 13-May 11
  • Location:Zürich

Posted 27 April 2013 - 05:20 PM

Hallo Zusammen

Ich tue mich ziemlich schwer mit den Relation, mir ist nach wie vor nicht klar wie Felder, von der in Beziehung stehenden Tabellen, angezeigt werden können.

Benutzt Ihr die Relationale ActiveRecords?
Welchen Vorteile hat es gegenüber der Methode mit z.B. FindBySql Abfragen?

Mein Dokumentstudium
http://www.yiiframew...de/database.arr

http://www.yiiframew...edene-tabellen/

Gruss Beat
0

#2 User is offline   SleepWalker 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 17
  • Joined: 02-June 12
  • Location:Ukraine

Posted 28 April 2013 - 02:31 AM

Hallo, Beat

Ich glaube, dass man fast in alle Projekten diese Relationen benutzt. Relationen helfen uns weniger Code zu schreiben und in manchen Fallen auch effizienter Abfragen zum Datenbank auszuführen.

z.B. ich will ein online Shop Seite herstellen. Also ich brauche ungefähr solche Datenbanktabelle: user, shop, shop_categorie, shop_brand, shop_comments, shop_order, shop_char (eigentlich braucht man mehr...). Und in diesem Fall könnten die Relationale ActiveRecords nützlich werden.
z.B. ich will ein Page mit mein Produkt zu zeigen, dafür brauche ich alle Informationen über das Produkt: allgemeine Information (Name, Preis, Bild, Beschreibung, vielleicht noch etwas) das ist `shop` Tabelle, dazu kommen auch `cat_id`, `prod_id` Felder (das ist wichtig für Relation. Es kann auch umgekehrt sein, dass es in andere Tabelle id von Produkt gespeichert wird (so genannte HAS_MANY oder HAS_ONE Relation).). Und jetzt muss man auch Kategorie, Brand, Kommentare, Eigenschaften unseres Produktes herausfinden. Dafür braucht man eigentlich Relationen.

Hier ist Code aus meinen Modell:
public function relations()
   {
     // NOTE: you may need to adjust the relation name and the related
     // class name for the relations automatically generated below.
     return array(
       'brand' => array(self::BELONGS_TO, 'Brand', 'brand_id'),
       'cat' => array(self::BELONGS_TO, 'Categorie', 'cat_id'),
       'comments' => array(self::HAS_MANY, 'Comment', 'prod_id'),
       'charShema' => array(self::BELONGS_TO, 'CharShema', 'cat_id'),
       'char' => array(self::HAS_MANY, 'Char', array('prod_id'=>'id')),
       'user' => array(self::BELONGS_TO, 'User', 'user_id'),
       'supplier' => array(self::BELONGS_TO, 'Supplier', array('supplier_id'=>'id')),
     );
   }

jetzt kann man so was schreiben:

$shop = Shop::model()->with('brand', 'cat')->findByAttributes(array('alias' => $pageUri));
// `with` bedeutet, dass ich will auch die Kategorie und das Brand als eine Abfrage bekommen. Also es wird nur eine Abfrage anstatt drei.

$shop->title; // Produktname
$shop->cat->name; // Kategoriename des Produktes
$shop->brand->name; //...

// jetzt will auch weitere Eigenschaften des Produktes bekommen. 
// Es kann Farbe, Dimensionierung, technische Charakteristiken sein 
// also unseres Produkt hat viele solche Eigenschaften (HAS_MANY)
foreach($shop->char as $char)
{
    echo $char->title . ': ' . $char->value;
}

Ungefähr dafür braucht man Relationen. Es war sehr vereinfacht. In der Realität ist es alles ein bisschen komplexer. Man kann auch Relationen erzeugen, die durch andere Relationen herausgerufen werden. Es gibt auch so genannte "Scopes" usw. Ich glaube, dass du es in Lauf der Zeit langsam verstehen wirst. Ich selbst weiß nicht alles, aber viel mehr als damals, wenn ich angefangen hatte.

Du kannst fast alle einfache Relationen mit `Gii` Tool erzeugen, aber um das zu machen, brauchst du diese Relationen als 'foreign keys' im deinen Datenbank einstellen.

Beste Grüße
houath - simple integration with social network authorization on Yii
1

#3 User is offline   beatcode 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 13-May 11
  • Location:Zürich

Posted 28 April 2013 - 05:04 AM

Seid gegrüsst SleepWalker

Du hast den Nagel wieder auf den Kopf getroffen. Ich wusste nicht wie ich auf die relationalen Felder zugreife:
Nun ist es mir klar.

$shop->cat->name; // Kategoriename des Produktes


Zudem werde ich wie von Dir empfohlen meine MySql Tabellen auf InnoDB umstellen und die Beziehungen setzen damit die Power von Gii mit mir ist.

Nochmals Danke für die Hilfe.
Grüsse Beat

Liveumgebung (Prototyp) Falls jemand mitmachen will einfach melden.

**************************************************
Für alle die auch hier vorbeikommen: Relationale Felder in Gridvew


Posted Image
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