Laravel select s dvoch tabuliek

Laravel select s dvoch tabuliek
« kdy: 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


ZAJDAN

  • *****
  • 2 086
    • Zobrazit profil
    • E-mail
Re:Laravel select s dvoch tabuliek
« Odpověď #1 kdy: 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
« Poslední změna: 14. 06. 2019, 11:33:23 od ZAJDAN »
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Re:Laravel select s dvoch tabuliek
« Odpověď #2 kdy: 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
« Poslední změna: 14. 06. 2019, 16:48:26 od becquerel »