Databaze – chybne nazvy sloupcu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Muhahe
- Člen | 79
Zdravim, zacal jsem delat pokusy s nette, ale zarazil jsem se nad problemem, kdy mi nette pouziva neexistujici nazvy sloupcu pri volani.
namespace Repositors;
use Nette;
class UkolyRepository extends Repository {
public function findIncomplete() {
return $this->findBy(array('hotovo' => '0'))->order('id ASC');
}
public function findAll() {
foreach ($this->getTable()->order('id')->limit(5) as $ukoly) {
echo $ukoly->nazev;
foreach ($ukoly->related('uzivxukol') as $uzivxukol) {
echo $uzivxukol->uzivatele->jmeno . ', ';
}
}
}
}
UkolyRepository dědí od
<?php
namespace Repositors;
use Nette;
abstract class Repository extends Nette\Object {
/** @var Nette\Database\Connection */
protected $connection;
public function __construct(Nette\Database\Connection $db){
$this->connection = $db;
}
/**
* Vrací objekt reprezentující databázovou tabulku.
* @return Nette\Database\Table\Selection
*/
protected function getTable(){
preg_match('#(\w+)Repository$#', get_class($this), $m);
return $this->connection->table(lcfirst($m[1]));
}
/**
* Vrací všechny řádky z tabulky.
* @return Nette\Database\Table\Selection
*/
public function findAll()
{
return $this->getTable();
}
/**
* Vrací řádky podle filtru, např. array('name' => 'John').
* @return Nette\Database\Table\Selection
*/
public function findBy(array $by)
{
return $this->getTable()->where($by);
}
}
Databaze vypada takto
http://krtkovo.tranet.cz/nette.png
A ladenka hazi chybu
PDOException #42S22
SQLSTATE[42S22]: Column not found: 1054 Unknown column ‚uzivxukol.id_ukolu‘ in ‚where clause‘
Takto se snazi vykonat SQL dotaz
SELECT *
FROM uzivxukol
WHERE (uzivxukol
.id_ukolu
IN (100, 101, 111,
150, 204))
Prijde mi divne, proc se odkazuje na sloupec id_ukolu, ktery neni v DB nikde uveden. Nevi nekdo prosim jak je to mozne?
Editoval Muhahe (8. 6. 2013 18:56)