Vlastní připojení MySQL - připojení tabulky k sobě samé

Připojení tabulky k sobě samé není vestavěnou funkcí, ale lze jej provést jednoduchou úpravou kódu SQL vygenerovaného generátorem CRUD.


O tabulkách, které se spojují samy se sebou

Některé tabulky mohou někdy používat relační klíč samy pro sebe.
Například tabulka, která obsahuje kategorie a zároveň podkategorie (viz obrázek níže).
V tomto příkladu má každá podkategorie vztah k nadřazené kategorii.

MySQL self-join structure example
Příklad tabulky MySQL s relačním klíčem, který odkazuje sám na sebe

Jak používat samostatně spojené tabulky pomocí generátoru CRUD PHP

Generátor PHP CRUD je schopen chápat tato konkrétní spojení stejně jako běžné vztahy.
Formuláře vygenerované v administraci budou tyto vztahy bez problémů používat.

Na druhou stranu je třeba upravit dotaz SQL použitý k načtení záznamů ze seznamu READ, aby správně fungoval.

Zde je návod, jak to udělat:

  1. Vytvořte seznam READ z generátoru jako obvykle.
  2. Otevřete model třídy PHP odpovídající vaší tabulce, který najdete v admin/class/crud/[TableName].php.

  3. V tomto souboru najdete 2 řádky, které vytvářejí základní dotaz SQL.

    S výše uvedenými příklady"kategorií" by to mělo vypadat takto:

    $this->join_query = ' LEFT JOIN `categories` ON `categories`.`parent_category_id`=`categories`.`id`';
    $qry_start = 'SELECT
    `categories`.`id`,
    `categories`.`parent_category_id` AS `categories_parent_category_id`,
    `categories`.`name`
    FROM categories';
  4. Tuto žádost musíte upravit na:

    • použít alias pro název tabulky, který odkazuje na relační pole.
    • přesunout LEFT JOIN do proměnné $qry_start.

    Váš konečný kód by měl vypadat takto:

    $this->join_query = '';
    $qry_start = 'SELECT
    `categories`.`id`,
    `c2`.`parent_category_id` AS `categories_parent_category_id`,
    `categories`.`name`
    FROM categories
    LEFT JOIN `categories` c2
    ON `categories`.`parent_category_id`=`c2`.`id`';

    V tomto příkladu je c2 aliasem tabulky kategorií.
    Používáme ji spolu s parent_category_id


    Velmi dobrý návod o MySQL Self Join je k dispozici zde

Hlavní stránka výukového programu PHP CRUD