2017-10-12 1 views
1

Je veux écrire la requête Laravel qhich veulent a plusieurs requêtes de sélection en simple requêterequête multiple de sélection dans la requête Laravel simple

select name,owner from project where owner in (select a.user_name from users a left join users b on a.manager=b.firstname where a.user_name='sridhar.ps' or a.manager like '%sridhar p%' or b.manager like '%sridhar p%') and customer_code='OTH_0071' 

La liste des requêtes au-dessus du outpu ce que je veux exactly.I veux changer la requête dans Laravel

Répondre

1

avec l'aide de whereRaw vous pouvez le faire comme ça

DB::table('project')->where('customer_code','OTH_0071')->whereRaw("owner in (select a.user_name from users a left join users b on a.manager=b.firstname where a.user_name='sridhar.ps' or a.manager like '%sridhar p%' or b.manager like '%sridhar p%')")->select('name','owner')->get(); 

pour l'utilisation de variables

DB::table('project')->where('customer_code','OTH_0071')->whereRaw("owner in (select a.user_name from users a left join users b on a.manager=b.firstname where a.user_name='sridhar.ps' or a.manager like '%".$manager."%' or b.manager like '%sridhar p%')")->select('name','owner')->get(); 

pour plus d'infos Vist laravel $ manager

espérons que cela vous aidera!

+0

comment utiliser la variable dans la requête $ manager = chèque « Sridhar p » – user3386779

+0

maintenant modifier la solution –

+0

dans la requête brute Je veux utiliser la variable – user3386779

1

Je pourrais d'abord réécrire votre requête en utilisant une série de jointures:

SELECT 
    p.name, 
    p.owner 
FROM project p 
INNER JOIN 
(
    SELECT a.user_name 
    FROM users a 
    LEFT JOIN users b 
     ON a.manager = b.firstname 
    WHERE 
     a.user_name = 'sridhar.ps' OR 
     a.manager LIKE '%sridhar p%' OR 
     b.manager LIKE '%sridhar p%' 
) t 
    ON p.owner = t.user_name 
WHERE 
    p.customer_code = 'OTH_0071'; 

ensuite construire la requête Laravel en utilisant une sous-requête brute pour représenter la table Lissé comme t ci-dessus:

$subquery = "(SELECT a.user_name FROM users a LEFT JOIN users b "; 
$subquery .= "ON a.manager = b.firstname "; 
$subquery .= "WHERE a.user_name = 'sridhar.ps' OR a.manager LIKE '%sridhar p%' "; 
$subquery .= "OR b.manager LIKE '%sridhar p%') AS t"; 
DB:table('project) 
    ->select('name', 'owner') 
    ->join(DB::raw($subquery), 'p.owner', '=', 't.user_name') 
    ->where('customer_code','OTH_0071') 
    ->get(); 

cette jointure approche pourrait être plus performante que ce que vous avez actuellement. Dans tous les cas, vous pouvez tester cette réponse, la comparer à la réponse de @Gaurav, puis utiliser celle qui fonctionne le mieux.

+0

où ajouter le code client – user3386779

+0

@ user3386779 Désolé, j'avais omis cela. J'ai mis à jour ma réponse. Faites simplement l'appel à 'où 'comme vous le feriez normalement; vous n'avez pas besoin d'une requête brute pour cela. –

+0

J'ai essayé de sélectionner le nom et le code, mais ne fonctionne pas – user3386779