Więc mam to małe zapytanie do uruchomienia na moim DB i działa dobrze w MySQL Workbench. Zasadniczo, SELECT z LEFT JOIN i UNION z LEFT JOIN ponownie.Jak wykonywać zapytania surowe za pomocą Laravel 5.1?
SELECT
cards.id_card,
cards.hash_card,
cards.`table`,
users.name,
0 as total,
cards.card_status,
cards.created_at
FROM cards
LEFT JOIN users
ON users.id_user = cards.id_user
WHERE hash_card NOT IN (SELECT orders.hash_card FROM orders)
UNION
SELECT
cards.id_card,
orders.hash_card,
cards.`table`,
users.name,
sum(orders.quantity*orders.product_price) as total,
cards.card_status,
max(orders.created_at)
FROM menu.orders
LEFT JOIN cards
ON cards.hash_card = orders.hash_card
LEFT JOIN users
ON users.id_user = cards.id_user
GROUP BY hash_card
ORDER BY id_card ASC
Próbowałem przetłumaczyć to na Laravel, bez powodzenia.
$cards = Card::selectRaw('cards.id_card, cards.hash_card ,cards.table, users.name, 0 as total, cards.card_status, cards.created_at as last_update')
->leftJoin('users','users.id_user','=','cards.id_user')
->whereNotIn('hash_card', Order::select('orders.hash_card')->get())
->union(
Order::selectRaw('cards.id_card, orders.hash_card, cards.table, users.name, sum(orders.quantity*orders.product_price) as total, cards.card_status, max(orders.created_at) as last_update')
->leftJoin('cards','cards.hash_card','=','orders.hash_card')
->leftJoin('users','users.id_user','=','cards.id_user')
)
->groupBy('hash_card')
->orderBy('cards.id_card','asc')
->get();
Dostaję błędu
ErrorException w Builder.php linii 1249: niezdefiniowanej właściwości: Illuminate \ database \ wymowny \ Builder :: $ powiązania
Jak mogłeś Wykonuję całkowicie surowe zapytanie w Laravel lub zapisuję zapytanie we właściwy sposób w Laravel?
rzeczywiście nie trzeba nawet gniazdo DB :: Raw połączenia. Możesz po prostu wywołać DB :: select ("... twój ciąg zapytania ..."); –
Masz rację! Usuwam gniazdo DB: Raw i działa jak urok! ;) –
Mam pytanie, czy mogę. Czy używanie zapytań sql sql za pomocą konstruktora zapytań (z lub bez DB :: raw) w Laravel 5 (dokładnie po 5.3) wystarczy, aby zapobiec iniekcjom sql? Znalazłem artykuł na ten temat, ale jest on dla Laravel 4. Nie mogę znaleźć jednego przekonującego potwierdzenia. – Robert