In rails-Model.find_by_sql vs connection.query,哪一個更好?
我需要對數據庫執行sql查詢;該查詢與任何特定模型無關,它可以混合來自多個表或其他表的數據。我有辦法做到這一點= -
首先是通過執行查詢agains模式和拍攝像這個 -
- RES結果= User.find_by_sql(「客戶選擇*連接和條件」 )
- 解析度= User.find_by_sql( 「SELECT * FROM [其他表]連接和條件」)
問題的本方法,我不舒服,因爲在用戶類對象我捕獲其他表的數據。就像第一個查詢結果具有來自客戶表的數據,因此在用戶對象中我獲得了客戶的屬性。而更有趣的問題是 - 如果生成的查詢具有id屬性,那麼
res.first.id將是客戶ID, 如果用戶模型與UserRoles模型有關係,並且我使用res.first.roles訪問此關係那麼它將從UserRole中獲取用於客戶ID的角色,這是完全錯誤的。
而且可能還有問題。
所以我認爲它有很多混亂。我們不需要處理連接,結果就是一個對象數組。因此使用res.first.id訪問對象屬性更容易,比如row [「id」]。
- 和第二種方法使用ActiveRecord連接,並執行像
查詢此res = ActiveRecord::Base.connection.query("sql query")
到位的查詢,我們可以使用select_one,SELECT_ALL並且還可以使查詢參數化的。
它存在的問題是它返回散列數組,但我需要對象數組以方便在代碼中訪問。所以我寫了一個類來將散列轉換爲對象(我認爲導軌在後臺執行相同的操作)並且工作正常。
所以我需要一些建議,既需要方法,也需要決定哪一個更好。
有你加入嘗試,包括對這種類型的查詢? –
如果您的意思是User.join(:table),那麼我們只需要執行sql。不要在rails模型上使用join。 – Kavi
您應該嘗試使用連接方法構建查詢。例如:Customer.joins(:model_name).where(some_condition) –