Skip to content

Commit

Permalink
fixed a join assumption based on defined_models config names, changed…
Browse files Browse the repository at this point in the history
… to use prefix of table name + _id as assumed fk, since this is standards of laravel. Still need a neat way to define the relation fields/retrieve them for automated joins to enable orderby-sub join
  • Loading branch information
Alex Blake committed Mar 2, 2016
1 parent 1c30914 commit 8f265b7
Showing 1 changed file with 33 additions and 7 deletions.
40 changes: 33 additions & 7 deletions src/Searcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -325,17 +325,30 @@ public function getSearch($search, $orderBy = null, $orderAs = null)

if(!$this->subJoined){

if(isset($orderField) && isset($orderDir))
{
$query = $query->orderBy($orderField, $orderDir);
}
elseif(count($order) > 0)

if(count($order) > 0)
{
foreach($order as $curOrder)
{
$query = $query->join($curOrder, $query->getModel()->getTable().'.'.$curOrder.'_id', '=', $curOrder.'.id')->orderBy($curOrder.'.'.$orderField, $orderDir);
$ent_key = $this->getEntityClass($curOrder);

if($ent_key == null)
{
return new MessageBag([
'messages' => [
//@TODO: lets add more clarity here later, for now this will do.
'Entity does not exist: '.$curOrder
]
]);
}
$ent = (new $ent_key);
$query = $query->join($ent->getTable(), $query->getModel()->getTable().'.'.$ent->getTable().'_id', '=', $ent->getTable().'.id')->orderBy($ent->getTable().'.'.$orderField, $orderDir);
}
}
elseif(isset($orderField) && isset($orderDir))
{
$query = $query->orderBy($orderField, $orderDir);
}
$this->subJoined = false;
}

Expand All @@ -344,6 +357,7 @@ public function getSearch($search, $orderBy = null, $orderAs = null)

if(!empty($results))
{
// print_r($results->toSql());die;
return $results;
}
else
Expand Down Expand Up @@ -426,7 +440,19 @@ function ($inner) use($field, $where, $value, $rel, $relations, $last, $curOrder
* which is needing to me migrated to configurations within models and use this as a fallback.
*/
if(!empty($curOrder)){
$query = $query->join($curOrder, $query->getModel()->getTable().'.'.$curOrder.'_id', '=', $curOrder.'.id')->orderBy($curOrder.'.'.$orderField, $orderDir);
$ent_key = $this->getEntityClass($curOrder);

if($ent_key == null)
{
return new MessageBag([
'messages' => [
//@TODO: lets add more clarity here later, for now this will do.
'Entity does not exist: '.$curOrder
]
]);
}
$ent = (new $ent_key);
$query = $query->join($ent->getTable(), $query->getModel()->getTable().'.'.$ent->getTable().'_id', '=', $ent->getTable().'.id')->orderBy($ent->getTable().'.'.$orderField, $orderDir);
$this->subJoined = true;
}
return $query;
Expand Down

0 comments on commit 8f265b7

Please sign in to comment.