Relace ,,has many,, mezi dvěmi tabulkami

ForestCZE
Člen | 209
+
0
-

Ahoj, snažím se propojit dvě tabulky:

tabulka log

tabulka users

Potřebuji vytáhnout name z tabulky users na základě shodných ID.

Cizí klíč v tabulce log

Pokud se nepletu, tak se jedná o relaci has many.

Metoda pro získání dat:

public function getLog(): array
    {
        $logs = [];
        $allLogs = $this->database->getLog()->select(':users.name')->order('log_id DESC');
        foreach ($allLogs as $log)
            $logs[] = $log;
        return $logs;
    }

Latte:

<table>
                <tr>
                    <th>Test</th>
                    <th>Test 2</th>
                </tr>

                {foreach $logs as $log}
                    <tr>
                        <td>{$log->action}</td>
                        <td>{$log->name}</td>
                    </tr>
                {/foreach}
            </table>

Chyba: No reference found for $log->related(users). Nevím, proč tam není reference a co mám špatně. Předem děkuji za pomoc.

David Matějka
Moderator | 6445
+
+1
-

Ahoj, kazdy log zaznam ma jednoho uzivatele. takze jde o „has one“. z druheho smeru ma pak kazdy uzivatel vice log zaznamu, takze od uzivatele je to „has many“

a kdyz referencujes has one vazbu, tak uvadis jako klic substring spojovaciho sloupecku, tady to bude ->select('name.name') (vhodnejsi nazev sloupecku by byl user_id a ne name_id)

ale vubec to nepotrebujes selectovat v modelu, staci, kdyz v sablone zapises

$log->name->name
ForestCZE
Člen | 209
+
0
-

@DavidMatějka

Pokud přejmenuju name_id na user_id, pak mají teda oba sloupce stejný název, ale nefunguje to, pokud dám:

{$log->name->name}

Funguje to až když dám:

{$log->user->name}

Je to tak správně?

David Matějka
Moderator | 6445
+
+1
-

ano, to je spravne. to jsem zapomnel zminit, ze tou zmenou sloupce se zmeni tenhle spojovaci klic. ale melo by to vyplivat z toho

a kdyz referencujes has one vazbu, tak uvadis jako klic substring spojovaciho sloupecku

ForestCZE
Člen | 209
+
0
-

David Matějka napsal(a):

ano, to je spravne. to jsem zapomnel zminit, ze tou zmenou sloupce se zmeni tenhle spojovaci klic. ale melo by to vyplivat z toho

a kdyz referencujes has one vazbu, tak uvadis jako klic substring spojovaciho sloupecku

Super, moc děkuji. Mohu se ještě zeptat, co uvádím nebo jak se zapisuje, když se jedná o has many? Určitě se to bude hodit :)