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.
comment utiliser la variable dans la requête $ manager = chèque « Sridhar p » – user3386779
maintenant modifier la solution –
dans la requête brute Je veux utiliser la variable – user3386779