2017-08-17 3 views
0

Je ne suis pas en mesure de trouver une solution parfaite pour cela.OrderBY Sur la relation modèle éloquant sur le contrôleur?

Controller:

$servicerequest = ServiceRequest::selectRaw('count(id) as totalservice,max(created_date) as last_service,service_provider_id,id,service_id,account_id,service_request,created_date')->with(['account' => function($first) use ($keyword) { 
         $first->select('id', 'restaurant_name')->orderBy('restaurant_name', 'DESC'); 
        }]) 
       ->with(['serviceProvider' => function($query) use ($keyword) { 
         $query->select('id', 'company_name'); 
        }])->groupBy('account_id') 
       ->orderBy('company_name', 'DESC') 
       ->paginate(100); 

je besoin d'une commande par le champ de la table de relation modèle et cet effet sur les données de la table principale. parce que c'est une relation en tête à tête, donc pas besoin de commander à l'intérieur.

Comme je l'ai besoin de la commande en entier sur les données de relations.

Collection:

enter image description here

Répondre

0

Vous devez vous joindre à votre table de relation utilisé table de relation orderBy.

Vous pouvez essayer ce code.

$servicerequest = ServiceRequest::selectRaw('count(id) as totalservice, max(created_date) as last_service,service_provider_id,id,service_id,account_id,service_request,created_date, SERVICEPROVIDERTABLE.company_name') 
             ->join('serviceProvider', 'SERVICEPROVIDERTABLE.id', '=', 'SERVICEREQUESTTABLE.service_provider_id') 
             ->with([ 
              'account' => function ($first) use ($keyword) { 
               $first->select('id', 'restaurant_name') 
                 ->orderBy('restaurant_name', 'DESC'); 
              } 
             ]) 
             //->with([ 
             // 'serviceProvider' => function ($query) use ($keyword) { 
             //  $query->select('id', 'company_name'); 
             // } 
             //]) 
             ->groupBy('account_id') 
             ->orderBy('SERVICEPROVIDERTABLE.company_name', 'DESC') 
             ->paginate(100); 

J'espère que cela fonctionne.

+0

Merci! Mais ce n'est pas moyen .. je demande la solution dans le même pas pour la manière différente. je sais déjà dans join, nous pouvons le faire. mais si vous connaissez Laravel ou ORM, alors vous avez une idée, puis postez-le. Est-ce votre réponse pour le gain de réputation alors désolé je ne peux pas :)? –

+0

Ne vous inquiétez pas pour cela, je ne viens pas pour la réputation, mais venez pour obtenir le problème et je peux aider à résoudre ce problème. Je pense que Laravel ne peut pas faire ça, parce que j'ai déjà un problème comme le tien. – Ramadhan

+0

Donc vous dites qu'il n'y a pas de solution pour cela. je dois utiliser joindre pour cela? –