Asked Sep 3rd, 4:31 AM 95 1 5
  • 95 1 5
+1

Lỗi khi kết nối Laravel và MongoDB

Share
  • 95 1 5

Lúc đầu thì vẫn collection bình thường,sau đó mình có kết nối cả mysql thì bị lỗi này.Nếu mà truy vấn bằng mysql thì lại bình thường.Bác nào biết cách fix không ạ![https://images.viblo.asia/23a4dd53-96ec-493c-8ca3-3267ce179b69.PNG

5 ANSWERS


Answered Sep 3rd, 4:35 AM
Accepted
+4
  • Hình như ở đây bạn bị sai về cú pháp rồi, để query từ bảng thì bạn dùng DB::table('admin') còn nếu bạn muốn dùng đến các hàm của Collection trong Laravel thì bạn phải thực hiện query ra kết quả rồi và dùng nó với biến $data dạng như này nhé $data->pluck('id')->all().
  • Trong trường hợp bạn dùng MongoDB thì cần tải thêm driver riêng cho Laravelhttps://github.com/jenssegers/laravel-mongodb.
  • Còn nếu bạn dùng 2 loại database cùng lúc thì với mỗi model thì bạn cần khai báo phần connection cho nó nhé https://laravel.com/docs/5.8/eloquent#eloquent-model-conventions mục Database Connection
Share
Answered Sep 3rd, 4:35 AM
+2

Khái niệm Collection trong MongoDB tương đương với Table trong MySQL, nên chắc bạn sử dụng hàm collection() với DbConnection là Mysql sẽ gặp lỗi đó. Bạn thử đổi sang dùng hàm table() xem (suyngam)

Share
Answered Sep 3rd, 4:40 AM
+1

Lỗi rất rõ ràng mà bạn. Hàm collection() k được định nghĩa.

Có phải bạn muốn gọi hàm connection() hay không v???

Share
Answered Sep 3rd, 6:03 AM
+1

Tham khảo cái này https://meramustaqbil.com/2019/04/28/how-to-use-and-make-multiple-database-connections-in-laravel/ Tốt nhất lên làm cái repository layer nữa rồi khai báo cách khởi tạo nó trong provider. Hoặc nếu dùng trực tiếp từ Model thêm

protected $connection = 'your-connection';
Share
Answered Sep 3rd, 6:53 AM
+1

Cảnh báo lỗi:

Lỗi xảy ra tại dùng 349 do Laravel cố gắng gọi đến magic method khi không tìm thấy hàm nào có tên collection trong trait DB extend class DatabaseManager. Tức là trait DB đang không hỗ trợ hàm này

Nguyên nhân truy vấn bình thường

Mình đang đoán do bạn switch giữa 2 db mysqlmongodb bằng cách sửa trong file env nhưng chưa xoá cache. Vì vậy hãy đảm bảo chạy php artisan optimize khi sửa file .env

Share