استعلام Laravel SQL صعب
سؤال
لا أستطيع "ترجمة" استعلام SQL أدناه إلى Laravel، كيف يمكنني القيام بذلك؟
SELECT SUM(transactions.amount) AS total, products.name
FROM transactions, product_stock, product_catalog, products
WHERE transactions.id_product_stock = product_stock.id_prodct_stock
AND product_stock.id_product_catalog = product_catalog.id_product_catalog
AND product_catalog.id_product = products.id_produto
GROUP BY (products.name);
لقد حاولت هذا (إرجاع الخطأ):
Transaction::join('product_stock', 'transactions.id_product_stock', '=', 'product.stock.id_product_stock')
->join('product_catalog', 'product_stock.id_product_catalog', '=', 'product_catalog.id_product_catalog')
->join('products', 'product_catalog.id_product', '=', 'products.id_product')
->groupBy('products.name')
->get([ DB::raw('SUM(transactions.amount) AS total'), DB::raw('products.name as name')]);
وهذا (يعود فارغا):
DB::raw('select SUM(transactions.amount) AS total, products.name
from transactions, product_stock, product_catalog, products
where transactions.id_product_stock = product_stock.id_prodct_stock
and product_stock.id_product_catalog = product_catalog.id_product_catalog
and product_catalog.id_product = products.id_produto
group by (products.name)');
يمكن لأي شخص أن يساعدني؟
المحلول
إذا كنت تريد تشغيل الاستعلام الأولي (وبالنسبة لاستعلام معقد مثل هذا، سألتزم باستخدام SQL الأولي لأنني أشعر براحة أكبر في ذلك)، ما عليك القيام به هو هذا:
$value = DB::select('select SUM(transactions.amount) AS total, products.name
from transactions, product_stock, product_catalog, products
where transactions.id_product_stock = product_stock.id_prodct_stock
and product_stock.id_product_catalog = product_catalog.id_product_catalog
and product_catalog.id_product = products.id_produto
group by (products.name)'
);
وهنا الوثائق لاستخدام DB::select()
طريقة.
DB::raw()
يستخدم لوضع علامة جزء لتعبير استعلام أكبر مثل SQL الخام.يرى http://laravel.com/docs/queries#raw-expressions للحصول على التفاصيل والأمثلة.
نصائح أخرى
التحقق السريع من وثائقها يبدو أنك تريد تشغيل الاستعلام بأكمله كتعبير خام.
http://laravel.com/docs/queries#raw-Expressions
hth
لا تنتمي إلى StackOverflow