Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Wangarad 14. 06. 2019, 09:35:38

Název: Laravel select s dvoch tabuliek
Přispěvatel: Wangarad 14. 06. 2019, 09:35:38
Dobry den.

Mam trosku problem vytvoirt select s sql v Laravel 5.
Existuju 2 tabulky prva games - obsahuje user_id a ostatne info
druha je user a tam su ostatne info o uzivateloch.
Aktualne v controllery mam toto na vytiahnutie hier
Kód: [Vybrat]
// games stats
        $gamesTotal    = Game::where('status', Game::STATUS_COMPLETED)->count();
        $gamesTotalBet = Game::where('status', Game::STATUS_COMPLETED)->sum('played');

Neviem ako to nalinkovat na uzivatela. Teda napriklad tabulka games vyber prvu hru kde je status complete vyber user_id pozri do tabulky user kde user=nieco a vyhod vysledok.
Nieaky typ ako na to? V SQL to dam ale v laravel mi to nechce behat ako si predstavujem
Název: Re:Laravel select s dvoch tabuliek
Přispěvatel: ZAJDAN 14. 06. 2019, 11:24:03
Nikdy jsem nepracoval s PHP frameworky, ale jedno vím jistě, že Laravel jsou sprostě obšlahnuté RubyOnRails postavené na PHP
Takže je dost možné, že to bude podobné jako v Railsích a tam se to dělá tak, že se vytvoří initializers/something.rb
a v něm pro danou třídu zápis něco jako:

Kód: [Vybrat]
  class Version < ::ActiveRecord::Base
     belongs_to :user, foreign_key: :whodunnit
  end

kde model 'user' bude náležet modelu 'Version' a ID z tabulky 'users' se dostane do sloupce 'whodunnit' v tabulce 'users'

https://nova.laravel.com/docs/1.0/resources/relationships.html#hasmany
 (https://nova.laravel.com/docs/1.0/resources/relationships.html#hasmany)
Název: Re:Laravel select s dvoch tabuliek
Přispěvatel: becquerel 14. 06. 2019, 16:46:23
Je to v zasade tak, jak kolega vyse nastinil. Bude potreba udelat trida (Eloquent model) `Game`, a k tomu druha trida (model) `User`

Nalinkovani se potom dela pomoci relacnich metod, kde trida `Game` bude mit definovanou relacni funkci na model `User`:

Kód: [Vybrat]
public function user()
{
    return $this->belongsTo(User::class);
}

Pote bude mozne udelat neco jako
Kód: [Vybrat]
$game = Game::where(...)->first(); (vytazeni prvniho zaznamu dle nejakych podminek)
a k informacim uzivatele bude mozne pristupovat pomoci `$game->user`

Pro uplnost jeste odkaz na oficialni dokumentaci
https://laravel.com/docs/5.8/eloquent-relationships