MyISAM, join a Selection – problém s referencí
- Daewoo
- Člen | 33
Ahoj.
Lze přepsat následující SQL dotaz do Nette Database aby se vracelo Selection? Už mi došly nápady…
SELECT p.* FROM product p JOIN product_searchdata ON product_searchdata.product = p.id WHERE MATCH (product.ean, product.description) AGAINST (?) ORDER BY 2 * MATCH(p.ean) AGAINST (?) + MATCH(p.description) DESC
Jsem nucen používat pro fulltext MyISAM, takže nemůžu udělat referenci a bez ní nejsem schopen poskládat dotaz dokupy. Představuju si něco takovýho:
$this->database->select('a.*')
->from('product', 'a')
->join('product_searchdata', 'b')
->on('b.product = a.id')
->where("MATCH ...
- Daewoo
- Člen | 33
Ze zoufalství:
- Upravit řádek v konstruktoru třídy N\D\T\Selection na:
$this->sqlBuilder = new SqlBuilder($tableName, $context, $conventions);
- Upravit definici kontruktoru třídy N\D\T\SqlBuilder na:
public function __construct($tableName, Context $context, IConventions $conventions = null)
- Upravit řádek v totožné funkci na:
$this->conventions = $conventions === null ? $context->getConventions() : $conventions;
Pak lze podle potřeby volat:
$selection = new \Nette\Database\Table\Selection($this->database, new \Nette\Database\Conventions\StaticConventions(), "eshop_product_searchdata");
Platí pro Nette 2.2, nevím jak jinde.
- Pavel Kravčík
- Člen | 1180
Dá se to i přepsat jak člověk potřebuje, my jsme to museli udělat
kvůli prefixům. My například máme tabulky con_contract
, ale
vazby contract_id
. Stačí si tam změnit ty
sprintf
.
class DatabaseReflection extends \Nette\Database\Conventions\StaticConventions
{
public function getHasManyReference(){}
}
- Daewoo
- Člen | 33
CZechBoY napsal(a):
Na co ten discovered potřebuješ? Já jedu na static conventions a žádnej problém.
Rozjebalo se mi ukládání objednávky. Neměl jsem čas na přepisování (bůh ví, kde by to všude řvalo), upravuju po asi 10 lidech, co od toho utekli, už běžící projekt…
Pavel Kravčík napsal(a):
Dá se to i přepsat jak člověk potřebuje, my jsme to museli udělat kvůli prefixům. My například máme tabulky
con_contract
, ale vazbycontract_id
. Stačí si tam změnit tysprintf
.class DatabaseReflection extends \Nette\Database\Conventions\StaticConventions { public function getHasManyReference(){} }
Taky řešení.
===
Díky chlapi za váš čas!