2017-04-04 7 views
0

Ich möchte die folgende SQL-Anweisung mit LehreQuery Builder benutzerdefinierte auf Klausel

select 
    address.*, 
    (CASE WHEN (customer.default_billing_address_id = address.id) THEN 1 ELSE 0 END) as isDefaultBillingAddress, 
    (CASE WHEN (customer.default_shipping_address_id = address.id) THEN 1 ELSE 0 END) as isDefaultShippingAddress 
from 
    s_user customer 
join 
    s_user_attributes customerattributes on customerattributes.customer_number = customer.customernumber 
join 
    s_user_addresses address on address.user_id = customer.id 
where customerattributes.userID = 214 

abzubilden Aber wenn ich meine Lehre Abfrage mit dem Query Builder schreibe ich bekomme immer die Abfrage ein wenig anders:

[...] 
FROM s_user_addresses s1_ 
[...] 
INNER JOIN s_user_attributes s5_ ON s0_.id = s5_.userID 
INNER JOIN s_user s0_ ON s0_.id = s5_.userID 
AND (s5_.customer_number = s0_.customernumber) 
WHERE s5_.userID = 214 
ORDER BY sclr_0 DESC 
    ,sclr_1 DESC 

Und schließlich ist dies der Code, der die Query Builder verwendet:

$builder->from(Address::class, 'address') 
    ->andWhere('customerAttribute.customerId = :userId') 
    ->setParameter('userId', $userId) 
    ->join('address.customer', 'customer') 
    ->join('customer.attribute', 'customerAttribute', Join::WITH, 'customerAttribute.customerNumber = customer.number') 
    ->addSelect([ 
     '(CASE WHEN (customer.defaultBillingAddress = address.id) THEN 1 ELSE 0 END) as HIDDEN isDefaultBillingAddress', 
     '(CASE WHEN (customer.defaultShippingAddress = address.id) THEN 1 ELSE 0 END) as HIDDEN isDefaultShippingAddress', 
    ]) 
    ->addOrderBy('isDefaultBillingAddress', 'DESC') 
    ->addOrderBy('isDefaultShippingAddress', 'DESC'); 

das Problem ist, dass die JOIN Klausel erhält eine , ich möchte nur, dass die wird nicht die ID

+0

Warum 'andWhere' und nicht' where'? – JustOnUnderMillions

+0

@JustOnUnderMillions sollte keinen Unterschied machen. –

+0

@Fabian Picone Dann gibt es keine Notwendigkeit für zwei Methoden, oder? – JustOnUnderMillions

Antwort

1

beigetreten Beide Bedingungen werden hinzugefügt, wie Sie durch Relation verbinden - dies fügt Standardbedingung, durch die Beziehung zugeordnet ist.

Ändern Sie einfach 'customer.attribute' mit dem vollständigen Namen der Entität, ich denke, etwas wie CustomerAttribute::class.

+0

So einfach, es hat funktioniert, danke. – Knerd