Hallo mensen,

Ik ben een vrij grote query aan het maken met de query builder van laravel. Maar ik krijg helaas niks terug van de query, terwijl als ik deze in phpmyadmin uitvoer krijg ik wel waardes terug. Ik ben vast heel dom bezig, maar ik ben er nu al een tijdje mee aan het prutsen en ik hoopte dat iemand het hier ziet.

<?php

/*
|--------------------------------------------------------------------------
| fetch {objsoorten, state}
| @return objecten
|--------------------------------------------------------------------------
*/
public static function fetch($objsoorten, $state = 'active') {
$query = DB::table('objecten')
->select('objecten.obj_idx', 'objectsoorten.objsoort_id', 'objectsoorten.objsoort_naam', 'objectspecificaties.objspec_waarde', 'objecten.obj_actief', 'attributen.attr_naam', 'attributen.attr_regex')
->join('objectsoorten', 'objectsoorten.objsoort_id', '=', 'objecten.objsoort_id')
->join('objectsoort_attributen', 'objectsoort_attributen.objsoort_id', '=', 'objectsoorten.objsoort_id')
->join('attributen', 'attributen.attr_id', '=', 'objectsoort_attributen.attr_id')
->join('objectspecificaties', function($join) {
$join->on('objectspecificaties.attr_id', '=', 'attributen.attr_id')
->on('objectspecificaties.obj_id', '=', 'objecten.obj_id');
})
->whereIn('objecten.obj_id', function($query) use ($objsoorten, $state) {
$query->select('objecten.obj_id')
->from('objecten')
->join('objectsoorten', 'objectsoorten.objsoort_id', '=', 'objecten.objsoort_id')
->join('objectspecificaties', 'objectspecificaties.obj_id', '=', 'objecten.obj_id')
->where('objectspecificaties.objspec_waarde', 'LIKE', '\'%%\'');

if(is_array($objsoorten)) {
foreach($objsoorten as $key => $id) {
if($key == 0) {
$query->where('objecten.objsoort_id', '=', intval($id));
} else {
$query->orWhere('objecten.objsoort_id', '=', intval($id));
}
}
} else {
$query->where('objecten.objsoort_id', '=', $objsoorten);
}

if($state == 'all') {
$query->where('objecten.obj_actief', '=', 0);
$query->orWhere('objecten.obj_actief', '=', 1);
} elseif($state == 'active') {
$query->where('objecten.obj_actief', '=', 1);
} elseif($state == 'inactive') {
$query->where('objecten.obj_actief', '=', 0);
}

$query->groupBy('objecten.obj_id');
})
->groupBy('objectsoort_attributen.attr_id')
->groupBy('objecten.obj_id')
->orderBy('objectsoort_attributen.objsoort_id')
->orderBy('objecten.obj_id')
->orderBy('attributen.attr_id')
->get();

var_dump($query);

return ($query) ? $query : false;
}


?>

De var dump:

array(0) { }


De resultset van phpmyadmin:



Alvast bedankt voor de gene die me kan helpen.
Ik ken de quiry builder van Laraval niet, maar het lijkt me (...) dat er wel een manier moet zijn om de query te printen voor je hem uitvoert. Alleen dan kan je controleren wat er fout gaat.

select `objecten`.`obj_id`, `objectsoorten`.`objsoort_id`, `objectsoorten`.`objsoort_naam`, `objectspecificaties`.`objspec_waarde`, `objecten`.`obj_actief`, `attributen`.`attr_naam`, `attributen`.`attr_regex` 
from `objecten` 
inner join `objectsoorten` on `objectsoorten`.`objsoort_id` = `objecten`.`objsoort_id` 
inner join `objectsoort_attributen` on `objectsoort_attributen`.`objsoort_id` = `objectsoorten`.`objsoort_id` 
inner join `attributen` on `attributen`.`attr_id` = `objectsoort_attributen`.`attr_id` 
inner join `objectspecificaties` on `objectspecificaties`.`attr_id` = `attributen`.`attr_id` 
and `objectspecificaties`.`obj_id` = `objecten`.`obj_id` 
where `objecten`.`obj_id` in (select `objecten`.`obj_id` 
                              from `objecten` 
                              inner join `objectsoorten` on `objectsoorten`.`objsoort_id` = `objecten`.`objsoort_id` 
                              inner join `objectspecificaties` on `objectspecificaties`.`obj_id` = `objecten`.`obj_id` 
                              where `objectspecificaties`.`objspec_waarde` LIKE '%%' 
                              and `objecten`.`objsoort_id` = 2 
                              and `objecten`.`obj_actief` = 1 
                              group by `objecten`.`obj_id`) 
group by `objectsoort_attributen`.`attr_id`, `objecten`.`obj_id` 
order by `objectsoort_attributen`.`objsoort_id` asc, 
`objecten`.`obj_id` asc, 
`attributen`.`attr_id` asc


Dit is dus het probleem, er gaat niks fout. De query zoals hij hem output is prima. Alleen ik krijg geen resultset terug van de query builder.
[offtopic]dus je hebt nu 44 regels code om een query van 19 regels te produceren. Ik begrijp die query builders niet....[/offtopic]

Heb je deze query precies zo uitgevoerd in phpmyadmin?
Wat doet de foutafhandeling in php/laraval? Krijg je op de een of andere manier ergens meldingen?

Waarom heb je dit erin staan:

where `objectspecificaties`.`objspec_waarde` LIKE '%%' 

Deze voorwaarde kan je weglaten, aangezien het geen enkele restrictie oplevert.
1) Ja zo heb ik hem uitgevoerd.
2) Op dit moment is het alleen of er wat in staat ja/nee ivm met testen
3) Snap ik, dat is wederom voor het testen. Daar komt later een waarde in te staan waar op gezocht kan worden, heb ik er extra uitgelaten.
Weet je zeker dat je een db connectie hebt en dat je de juiste database hebt geselecteerd?
Alles werkt, alleen die query niet. Dit is niet de eerste query die ik uitvoer hoor
Dan wordt het stap voor stap die query opbouwen en elke keer testen of de resultaten nog komen.
Maar ik zeg net dat er met de query niks mis is, alleen ik krijg geen resultset van de query builder. De query zelf en het result ervan is goed als ik de query in sql invoer.
Probeer is bij "Order By", erbij te schrijven of het gaat om ASC of DESC?
Voer je de query wel uit?

Reageren