Tôi đang cố gắng để thiết lập một số video yêu thích đơn giản cho ứng dụng của tôi sử dụng Laravel/Jenssegers MongoDBLaravel Jenssegers MongoDb Các mối quan hệ không hoạt động?
Tôi có hai mô hình:
class Item {
public function favorites()
{
return $this->hasMany('App\Models\User', 'favorites');
}
}
class User {
public function favorites()
{
return $this->hasMany('App\Models\Item', 'favorites');
}
}
Vì vậy, một mặt hàng có thể có nhiều người sử dụng và người dùng có thể có nhiều mặt hàng hoặc "yêu thích".
Khi tôi cố gắng chạy một truy vấn đơn giản như:
Item::with('favorites')->get();
Mối quan hệ cho mục yêu thích là có nhưng một mảng trống.
Bảng favorites
rất đơn giản và chỉ có ba cột:
_id, item_id, user_id
Tôi cũng đã cố gắng sử dụng embedsMany
không có may mắn:
return $this->embedsMany('App\Models\User', 'favorites');
Tôi cũng đã thử mọi sự kết hợp của các tham số.
return $this->embedsMany('App\Models\User', 'favorites', 'building_id', 'user_id');
return $this->embedsMany('App\Models\User', 'favorites', 'user_id', 'building_id');
return $this->hasMany('App\Models\User', 'favorites', 'building_id', 'user_id');
return $this->hasMany('App\Models\User', 'favorites', 'user_id', 'building_id');
kết quả Strange khi sử dụng:
return $this->hasMany('App\Models\User', 'favorites', 'building_id', 'user_id');
Chỉ trong tình huống này nó sẽ trả về tất cả người dùng, mặc dù yêu thích chỉ có một kỷ lục.
Đồng thời cố gắng gỡ lỗi bằng cách sử dụng getQueryLog
chỉ mang lại cho tôi một mảng trống bất kỳ lúc nào.
print_r(\DB::connection('mongodb')->getQueryLog());
Tôi đã thực hiện việc này bằng cách sử dụng mysql
và chưa bao giờ gặp sự cố. Vì vậy, không thực sự chắc chắn nơi mà các vấn đề đang đến từ.
Bạn phải ghi nhớ rằng cơ sở dữ liệu NoSQL như MongoDB không có mối quan hệ. Đó là ý tưởng về cơ sở dữ liệu NoSQL. Nếu bạn cần mối quan hệ truyền thống, có lẽ bạn nên cân nhắc sử dụng cơ sở dữ liệu SQL truyền thống (như MySQL hoặc PostgreSQL). – Bald
Chính xác, nếu bạn muốn quan hệ hasMany, bạn phải lồng toàn bộ các cá thể người dùng bên trong đối tượng Mục ví dụ: "{ " người dùng ": [ {" name ":" user1 "}, {" name ":" user2 " } ] } ' –
@Bald Tôi đoán hùng hồn không có tham gia, nó 'sử dụng tải háo hức. Vì vậy, có gì sai khi tìm nạp một số dữ liệu liên quan. Ví dụ bạn sẽ không lưu trữ đối tượng người dùng bên trong bao giờ bình luận của một bài viết phải không? – Rob