Jump to content
php.lv forumi
Sign in to follow this  
ziedinjsh

Kategorija un subkategorijas.

Recommended Posts

Nu slikti, ko lai saka. Vai tu pats esi mēģinājis domāt / rakstīt kādu kodu, lai iznestu to pieprasījumu ārpus cikla?

Jā, augstāk ar inner join, bet tā arī nesapratu kā izvadīt informāciju

Share this post


Link to post
Share on other sites

Kā lai tagad izvada zem katras pamatkategorijas subkategorijas?
 

$results = ORM::for_table('k1')->select('k1.id')->select('k1.cat_name_lv')->group_by('cat_name_lv')
->select('k1_to_k2.k1_id')->select('k1_to_k2.k2_id')
->join('k1_to_k2', array('k1.id', '=', 'k1_to_k2.k1_id'))
->select('k2.id')->select('k2.sub_name_lv')
->join('k2', array('k1_to_k2.k2_id', '=', 'k2.id'))->find_many();
foreach($results as $result){

}

Share this post


Link to post
Share on other sites

1. Ordero pēc Kategorijas

2. ciklā, kamer "Tekošā kategorija" == "Iepriekšējā kategorija"; do nothing

2.1 citādāk "echo Jaunā kategorija"

3. "echo Subkategorija"

Edited by waplet

Share this post


Link to post
Share on other sites

Tā pag, vai tu tur centies kverijot main kategorijas un subkategorijas vienā kverijā, un ceri tās vienkārši izvadīt nested tree formātā?

Share this post


Link to post
Share on other sites

CREATE TABLE product_categories

  id,

  name,

  etc.

 

CREATE TABLE product_category_links

  category_id,

  parent_id,  <-- NULL pirmā līmeņa kategorijai, product_categories.id 2. un zemāka līmeņa kategorijām.

  position etc <-- kārtošanai

 

Pirmā līmeņa kategoriju atlase:

 

SELECT pc.* FROM product_categories pc JOIN product_category_links pcl ON pc.id = pcl.category_id WHERE pcl.parent_id IS NULL;

 

Otrā līmeņa kategorijas:

 

SELECT pc.* FROM product_categories pc JOIN product_category_links pcl ON pc.id = pcl.category_id WHERE pcl.parent_id = $this->id ORDER BY pcl.position;

 

 

ORM gadījumā - jāpēta FW dokumentācija, bet idejiski:

 

class Categories. ...

{

 

     // relations

     public function getParents()

     {

          return $this->hasMany(Categories::className(), 'id' => 'parent_id')->via( ... kur norāda, ka 'category_id' = this.id)

     }

 

     public function getSubcategories()

     {

          return $this->hasMany(Categories::className(), 'id' => 'category_id')->via( ... kur norāda, ka 'parent_id' = this.id)

     }

 

     // utt.

 

 

}

 

Tad attiecīgi:

 

$category = new Category();

$category->parents ....

$category->subcategories

 

 

+ statiska metode top level kategoriju atlasei, atkarībā no ORM. Tas pats many()->via(), kur parent_id IS NULL.

 

Glabāt atsevšķā tabulā 1. līmeņa un 2. līmeņa kategorijas nevajag. Kādā brīdī gribēsies 2. līmeņa kategoriju izcelt pirmajā līmenī. Ar šo variantu tas iespējams tā, ka viena kategorija var būt gan 1., gan 2. līmeņa kategorija:

 

Augļi

  Akcija!

  Āboli

  Banāni

  Etc.

Konfektes

  Akcija!

Akcija! 

Edited by Mr.Key

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×