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
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
Koukni do dokumentace na tu druhou cast, kde se povida o backjoinu
Editoval matej21 (18. 8. 2014 13:31)
- David Matějka
- Moderator | 6445
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)