[cakephp] "custom" query uitvoegen met "query()" functie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Freemann
  • Registratie: Januari 2002
  • Niet online

Freemann

CO2 Warmtepomp + VentilatieWTW

Topicstarter
Zit nu een middag of 2 te stoeien met de query() functie van CakePHP.

Ik krijg het maar niet voorelkaar om met de query functie een query uit te voeren en deze uiteindelijk in mijn view te krijgen. Als ik een dump maak van mijn controller dan wordt alleen de basis query door cakephp uitgevoerd maar niet de door mij opgestelde query in de model.

Heb nu in de model een functie "doSomething" gemaakt met hierin mijn query.
De functie roep ik aan in mijn controller en laat ik via mijn controller posten naar mijn view.
Echter laat de controller dump geen data zien van mijn uitgevoerde query, terwijl de query volgens de query dump wel wordt uitgevoerd.

Waarschijnlijk post ik de array niet goed door met Cake naar mijn view maar ik kom er niet uit....

Wie o wie kan mij helpen?

Hieronder alle (delen) van de files en dumps::

view: index.ctp
PHP: view.ctp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<table>
<?php
$i = 0;
foreach ($leveranciers as $leverancier):
 $class = null;
 if ($i++ % 2 == 0) {
  $class = ' class="altrow"';
 }

?>
 <tr<?php echo $class;?>>
  <td>
   <?php echo $leverancier['Leveranciers']['id']; ?>
  </td>
  <td>
   <?php echo $leverancier['Leveranciers']['name']; ?>
  </td>
  <td>
   <?php echo $leverancier['Merchants']['name']; ?>
  </td>
  
  <td class="actions">
   <?php echo $html->link(__('View', true), array('action' => 'view', $leverancier['LeveranciersMerchant']['id'])); ?>
   <?php echo $html->link(__('Edit', true), array('action' => 'edit', $leverancier['LeveranciersMerchant']['id'])); ?>
   <?php echo $html->link(__('Delete', true), array('action' => 'delete', $leverancier['LeveranciersMerchant']['id']), 
   null, sprintf(__('Are you sure you want to delete # %s?', true), $leverancier['LeveranciersMerchant']['id'])); ?>
  </td>
 </tr>
<?php endforeach; ?>
</table>


controller: leveranciersMerchantsController
PHP: leveranciers_merchants_controller.php
1
2
3
4
5
6
7
8
9
10
11
class  LeveranciersMerchantsController extends AppController {

 var $name = 'LeveranciersMerchants';
 var $helpers = array('Html', 'Form');

 function index() {
  $this->LeveranciersMerchant->recursive = 0;
  $leveranciers = $this->doSomethingmodel->doSomething();
    $this->set('leveranciers', $this->paginate());
 } 
}


model: LeveranciersMerchant (deze query wordt wel uitgevoerd maar is niet in de view aanwezig, zie query 3 in de query dump)
PHP: leverancier_merchant.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class LeveranciersMerchant extends AppModel {

 var $name = 'LeveranciersMerchant';

 function doSomething() {
    $this->query("SELECT 
    Leveranciers.name,
    Leveranciers.logo,
    affiliates.title
  FROM
    leveranciers_merchants LeveranciersMerchant
    INNER JOIN merchants Merchants ON (LeveranciersMerchant.merchants_id = Merchants.id)
    INNER JOIN leveranciers Leveranciers ON (LeveranciersMerchant.leveranciers_id = Leveranciers.id)
    INNER JOIN affiliates ON (Merchants.affiliate_id = affiliates.id);");
 }
}
?>


deel van de controller dump, welke de uitvoer van de basisquery laat zien (query 5 in de query dump)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            [leveranciers] => Array
                (
                    [0] => Array
                        (
                            [LeveranciersMerchant] => Array
                                (
                                    [id] => 4792
                                    [merchants_id] => 100
                                    [leveranciers_id] => 1068
                                )

                        )

                    [1] => Array
                        (
                            [LeveranciersMerchant] => Array
                                (
                                    [id] => 4791
                                    [merchants_id] => 966
                                    [leveranciers_id] => 1060
                                )

                        )


query dump:
code:
1
2
3
4
5
1   DESCRIBE `leveranciers_merchants`       3   3   3
2   SELECT `cake_sessions`.`data` FROM `cake_sessions` WHERE `cake_sessions`.`id` = '60ee4c24678e424e36b1bb0458440102'      1   1   2
3   SELECT Leveranciers.name, Leveranciers.logo, affiliates.title FROM leveranciers_merchants LeveranciersMerchant INNER JOIN merchants Merchants ON (LeveranciersMerchant.merchants_id = Merchants.id) INNER JOIN leveranciers Leveranciers ON (LeveranciersMerchant.leveranciers_id = Leveranciers.id) INNER JOIN affiliates ON (Merchants.affiliate_id = affiliates.id);     106 106 5
4   SELECT COUNT(*) AS `count` FROM `leveranciers_merchants` AS `LeveranciersMerchant` WHERE 1 = 1      1   1   1
5   SELECT `LeveranciersMerchant`.`id`, `LeveranciersMerchant`.`merchants_id`, `LeveranciersMerchant`.`leveranciers_id` FROM `leveranciers_merchants` AS `LeveranciersMerchant` WHERE 1 = 1 LIMIT 20        20  20  1



de foutmelding in de view:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Notice (8): Undefined index:  Leveranciers [APP\views\leveranciers_merchants\index.ctp, line 45]

    <tr<?php echo $class;?>>

        <td>

            <?php echo $leverancier['Leveranciers']['id']; ?>

include - APP\views\leveranciers_merchants\index.ctp, line 45
View::_render() - CORE\cake\libs\view\view.php, line 666
View::render() - CORE\cake\libs\view\view.php, line 376
Controller::render() - CORE\cake\libs\controller\controller.php, line 803
Dispatcher::_invoke() - CORE\cake\dispatcher.php, line 230
Dispatcher::dispatch() - CORE\cake\dispatcher.php, line 194
[main] - APP\webroot\index.php, line 88

[ Voor 17% gewijzigd door Freemann op 07-02-2010 11:34 ]

https://www.taltion.nl, https://www.trekhaakkoffer-huren.nl, https://www.fietsendrager-huren.nl, https://www.fietskar-huren.nl


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 12-09 10:03

Creepy

Tactical Espionage Splatterer

(jarig!)
Begrijp je de foutmelding uberhaupt? PHP klaagt dat hij de index Leveranciers niet kan vinden. Dus ergens benader je een array met een index 'Leveranciers' die (nog) niet bestaat. Dus controleer of je variabele $leverancier deze index heeft (dump hem even volledig) en controleer waar deze vandaan had moeten komen. In de dump die je nu geeft heeft de variabele $leverancier helemaal geen index Leveranciers.

[ Voor 38% gewijzigd door Creepy op 07-02-2010 14:27 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Freemann
  • Registratie: Januari 2002
  • Niet online

Freemann

CO2 Warmtepomp + VentilatieWTW

Topicstarter
dat is ook wat ik zeg en begrijp de foutmelding heel goed.

De query wordt wel uitgevoerd maar hij komt niet in me controller naar voren (hij zit namelijk niet in de dump van de controller) en daardoor kan ik hem ook niet aanroepen in me view. De controller heeft het deel van de array niet beschikbaar en laat alleen de basis query zien.

mijn vraag is ook:
wat ik op dat punt fout doe en daarom post ik ook alle relevante delen van de mvc.
De aanvraag naar de functie gaat goed maar hij registreert hem niet goed ofzo waardoor ik hem kwijt raak in me controller?

Mogelijk kan iemand mij zeggen wat ik fout doe bij de aanroep en waarom ik hem niet in mijn controller krijg.

de volledige dump is hier te vinden:
http://home.frijmann.nl/controller_dump.txt

https://www.taltion.nl, https://www.trekhaakkoffer-huren.nl, https://www.fietsendrager-huren.nl, https://www.fietskar-huren.nl


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Je array bevat een key 'leveranciers' en je vraagt om de key 'Leveranciers' in je view, die kan ie dan niet vinden. Hint: hoodletter...

Acties:
  • 0 Henk 'm!

  • Freemann
  • Registratie: Januari 2002
  • Niet online

Freemann

CO2 Warmtepomp + VentilatieWTW

Topicstarter
mag op slot...

heb het over een andere boeg gegooid en dat werkt wel.

https://www.taltion.nl, https://www.trekhaakkoffer-huren.nl, https://www.fietsendrager-huren.nl, https://www.fietskar-huren.nl


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Laat anders nog even weten wat je anders hebt gedaan, heeft een ander er ook nog iets aan :{

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 12-09 10:03

Creepy

Tactical Espionage Splatterer

(jarig!)
Op slot? Waarom? We zitten hier niet om alleen jouw een plezier te doen ;) Misschien wil iemand anders nog wat toevoegen, vragen. Misschien loopt binnenkort iemand tegen een soortgelijk probleem aan, en dan zou het wel fijn zijn als je kan aangeven hoe je het nou hebt opgelost. Dan hebben anderen ook nog wast aan dit topic. Mocht je reactie uitblijven dan zet ik er waarschijnlijk alsnog een slot op. Niet omdat het topic voor jou is opgelost, maar omdat het topic dan 0,0 meerwaarde heeft voor de rest van de communitie.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • m33p
  • Registratie: September 2002
  • Laatst online: 05-09 15:26
Je was vergeten het resultaat te retourneren (return $bla) in je model ;-) Daarom zag je wel de de query zelf wel terugkomen, maar in je controller kreeg je dus nooit resultaat terug vanuit je model waardoor deze in de view ook niet beschikbaar was.
Pagina: 1