如果我有T-SQL(或存儲過程)從多個表返回記錄(也許使用DBI),有沒有辦法讓我手動實例化ActiveRecord模型及其關聯?很顯然,我在數據庫性能之後。我希望能夠構建自己的對象層次結構(模型及其關係),但是當我完成所有工作時,我希望每個模型都能正常運行。也就是說,我希望這可以在沒有可能導致我的結構行爲異常的黑客攻擊下完成。手動實例化ActiveRecord模型及其關係?
編輯:
這是有點做作,但它確實說明了如何一個查詢可以返回數據n級深(其中「n」只有實際限制),並在一個調用返回一切到數據庫:
SELECT * FROM customers
WHERE id = 1;
SELECT * FROM orders
WHERE customer_id = 1;
SELECT * FROM lineitems
WHERE order_id IN (
SELECT id FROM orders
WHERE customer_id = 1
);
然後擁有所有的記錄,我會簡單地映射我自己的關聯。通過ActiveRecord和:include來做這件事的問題是,它會多次訪問數據庫而不是僅僅一次 - 隨着「n」的增加,更多的是徵稅。
我是否正確理解您想要獲取SQL查詢的結果並從它們實例化ActiveRecord對象? – 2009-10-05 15:28:56
是的,還有協會。 – Mario 2009-10-06 00:06:09
如果仔細觀察,您最後的查詢實際上不會返回訂單和客戶,它只是返回lineitems。如果你需要這3個查詢來獲得assosciations,那麼它與使用include相同:include with ActiveRecord – Staelen 2009-10-06 02:02:32