Jak napsat join SQL dotazu na databázi

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
xperia
Člen | 4
+
0
-

Ahoj,

prosím, jak udělám join několika tabulek? Zdejší návody mi vůbec nefungují nebo jsou zastaralé.

Obchody – obchod_id, nazev, popis, mena, smazano
Obchody_spravci – spravce_id, obchod_id, status, role

Mám nastavené i cizí klíč v obchody_spravci na obchody, také mi to nejde…

Cílem je získat všechny obchody, kde přihlášený uživatel je správce. Kám tento kód umístím? Do presenteru nebo modelu?

V Codeigniteru je to zapsáno takto:

$this->db->select('obchody.*');
$this->db->from('obchody');
$this->db->join('obchody_spravci', 'obchody_spravci.obchod_id = obchody.obchod_id','left');
$this->db->where('obchody_spravci.uzivatel_id', $uzivatel_id);
$this->db->where('obchody_spravci.status_spravce', 1);
$query = $this->db->get();
OBCHODREPOSITORY.PHP (model)

namespace App\Model;
use Nette;

class ObchodRepository extends Nette\Object
{
  /** @var Nette\Database\Context */
  private $database;
  public function __construct(Nette\Database\Context $database)
    {
      $this->database = $database;
    }
  /** @return Nette\Database\Table\Selection */
  public function findAll()
    {
      return $this->database->table('obchody')->related('obchody_spravci'); // nefunguje -> Call to undefined method Nette\Database\Table\Selection::related()
    }

Děkuji

David Matějka
Moderator | 6445
+
0
-

Koukni do dokumentace na tu druhou cast, kde se povida o backjoinu

Editoval matej21 (18. 8. 2014 13:31)

xperia
Člen | 4
+
0
-

Kdyz jsem to udelal podle toho navodu, vyhodilo mi to

$selection = $this->database->table('obchody');
$selection->where('obchody_spravci.spravce_id = 1');
Nette\Database\Reflection\MissingReferenceException

No reference found for $obchody->obchody_spravci.
David Matějka
Moderator | 6445
+
0
-

mas tam „has many“ relaci, musis pouzit ten zapis s dvojteckou. A hodnoty nikdy nedosazuj primo do podminky, ale pouzij parametry:

$selection->where(':obchody_spravci.spravce_id', 1)

Editoval matej21 (18. 8. 2014 13:50)

vvoody
Člen | 910
+
+2
-

OT:
Kde učia/odporúčajú:

  • nazývať tabuľky v množnom čísle?
  • prefixovať PK názvom tabuľky?

Nejako podozrivo často tu je vidno takéto štandardy :)