DB BaseBuilder Join() - RawSql as table
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 42/100
Direzione di ricerca
Inizia in system/Database/BaseBuilder.php, in corrispondenza di join() e trackAliases(), quindi esamina la chiamata da system/Model.php alla riga 930. Verifica che una tabella RawSql possa essere passata a join() senza causare un TypeError e che i join esistenti con stringhe e tabelle con alias continuino a funzionare.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
PHP Version
8.2
CodeIgniter4 Version
4.5.3
CodeIgniter4 Installation Method
Composer (using codeigniter4/appstarter)
Which operating systems have you tested for this bug?
Windows
Which server did you use?
apache
Database
No response
What happened?
CRITICAL - 2024-07-24 14:10:15 --> TypeError: CodeIgniter\Database\BaseBuilder::join(): Argument #1 ($table) must be of type string, CodeIgniter\Database\RawSql given, called in C:\xampp\portal\vendor\codeigniter4\framework\system\Model.php on line 930
[Method: GET, Route: public/fuel/pricing/getprice]
in SYSTEMPATH\Database\BaseBuilder.php on line 620.
1 SYSTEMPATH\Model.php(930): CodeIgniter\Database\BaseBuilder->join(Object(CodeIgniter\Database\RawSql), 't5.product_id = fpp.id', 'inner')
Steps to Reproduce
Used to be able to use RawSql for table on join()
$builder = $this
->select("{$this->table}.description_id AS id, fpd.description,
fpp.product,
DATE({$this->table}.effective) AS effective,
{$priceField}")
->join(
"{$this->descTable} AS fpd",
"fpd.id = {$this->table}.description_id",
'inner'
)
->join(
"{$this->prodTable} AS fpp",
"fpp.id = {$this->table}.product_id",
'inner'
);
$sql = "(SELECT
fpp.id AS product_id,
IF(ph.TAXCLASS IS NULL,0,ph.TAXCLASS) AS taxclass,
IF(pw.SALESTAXCLASS IS NULL,0,pw.SALESTAXCLASS) AS salestaxclass
FROM
misc.fuel_prices_product AS fpp
LEFT JOIN pds.pds_prodhead AS ph ON ph.PRODUCTCODE = fpp.product
LEFT JOIN pds.pds_prodware AS pw ON pw.PRODUCTCODE = fpp.product AND pw.PACKCODE = '' AND pw.WHALPHA = 3
GROUP BY fpp.id) t5";
$builder->join(
new RawSql($sql),
"t5.product_id = `fpp`.id",
'inner'
);
// $params['id'] = 14;
$builder->where("{$this->table}.description_id", $params['id']);
$builder->where("DATE({$this->table}.effective) BETWEEN DATE_SUB('{$params['fromdate']}',INTERVAL 15 DAY) AND '{$params['todate']}'");
$builder->where('fpp.product', $params['product']);
$builder->groupBY("DATE({$this->table}.effective)");
$builder->orderBy("{$this->table}.effective", 'ASC');
$data = $builder->get()->getResultObject();
Expected Output
Get errors now.
Fix by adding adding RawSq type:
public function join(string|RawSql $table, $cond, string $type = '', ?bool $escape = null)
{
Adding is_string($table) twice in BaseBuilder::trackAliases()
protected function trackAliases($table)
{
if (is_array($table)) {
foreach ($table as $t) {
$this->trackAliases($t);
}
return;
}
// Does the string contain a comma? If so, we need to separate
// the string into discreet statements
if (is_string($table) && str_contains($table, ',')) {
return $this->trackAliases(explode(',', $table));
}
// if a table alias is used we can recognize it by a space
if (is_string($table) && str_contains($table, ' ')) {
Anything else?
I'd send in a PR but I'm slammed busy at the moment and I don't have my development environment ready.
- Lingua principale
- PHP
- Stelle
- 6k
- Fork
- 2k
- Merge medio
- 1g 22h
- PR unite (30g)
- 59
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di codeigniter4/CodeIgniter4
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
codeigniter4/CodeIgniter4#10616 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
codeigniter4/CodeIgniter4#10618 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 62/100
codeigniter4/CodeIgniter4#10617 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
codeigniter4/CodeIgniter4#10615 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
codeigniter4/CodeIgniter4#10589 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di codeigniter4/CodeIgniter4
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
pluginsGLPI/addressing#127 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
TYPO3BestPractices/tea#2409 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
api-platform/core#8690 ·
I maintainer di solito rispondono entro 1 giorno
-
No Code Attached Yet
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
joomla/joomla-cms#48626 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
DorsetDigital/silverstripe-schema-manager#26 ·
I maintainer di solito rispondono entro 1 giorno