Laravel: Как я могу преобразовать этот оператор Sql в Eloquent или Query Builder? - PullRequest
0 голосов
/ 26 марта 2019

Мне нужно конвертировать цену товара в разных валютах в доллары США. У меня есть две таблицы: продукты и валюты.

| id | currency | value_usd |
 +----+----------+-----------+
 |  1 | USD      | 1         |
 |  2 | AUD      | 1.077315  |
 |  3 | GBP      | 0.620868  |
 |  4 | EUR      | 0.775338  |
 +----+----------+-----------+


+----+-------------+----------+
| id | price       | currency |
+----+-------------+----------+
|  1 | 100         | USD      |
|  2 | 50          | GBP      |
|  3 | 75          | EUR      |
|  4 | 60          | GBP      |
+----+-------------+----------+

У меня проблемы со вторым JOIN в Laravel

SELECT 
p.slug,
p.price, 
p.currency, 
price * (c2.value_usd * c1.value_usd) as converted_price,
c2.currency as converted_currency

FROM `products` p
JOIN `currencies` c1 ON p.currency = c1.currency
JOIN `currencies` c2 ON c2.currency = 'USD'

Я пробовал это

$query = \DB::table('products')
          ->join('currencies AS c1', 'products.currency', '=', 'c1.currency')
          ->join('currencies AS c2', 'c2.currency', '=', 'USD')      
          ->get();

но получил ошибку

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'USD' in 'on clause' (SQL: select * from `products` inner join `currencies` as `c1` on `products`.`currency` = `c1`.`currency` inner join `currencies` as `c2` on `c2`.`currency` = `USD`)

1 Ответ

0 голосов
/ 26 марта 2019

положить это DB::raw("('USD')") в объединение

$query = \DB::table('products')
          ->join('currencies AS c1', 'products.currency', '=', 'c1.currency')
          ->join('currencies AS c2', 'c2.currency', '=', DB::raw("('USD')"))      
          ->get();

надеюсь, что это будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...