sto cercando di impostare alcuni semplici favoriting per la mia app utilizzando laravel/Jenssegers MongoDBLaravel Jenssegers MongoDb Relazioni non funzionanti?
Ho due modelli:
class Item {
public function favorites()
{
return $this->hasMany('App\Models\User', 'favorites');
}
}
class User {
public function favorites()
{
return $this->hasMany('App\Models\Item', 'favorites');
}
}
Quindi un elemento può avere molti utenti e un utente può avere molti elementi o "preferiti".
Quando si tenta di eseguire una semplice interrogazione come:
Item::with('favorites')->get();
Il rapporto di preferiti è lì, ma un array vuoto.
La tabella favorites
è semplice e ha solo tre colonne:
_id, item_id, user_id
Ho provato anche utilizzando embedsMany
senza fortuna:
return $this->embedsMany('App\Models\User', 'favorites');
Ho anche provato ogni combinazione di parametri.
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');
risultati strana quando si utilizza:
return $this->hasMany('App\Models\User', 'favorites', 'building_id', 'user_id');
Solo in questa situazione restituisce tutti gli utenti, anche se favoriti ha un solo record.
Anche il tentativo di eseguire il debug utilizzando getQueryLog
mi fornisce semplicemente un array vuoto in ogni momento.
print_r(\DB::connection('mongodb')->getQueryLog());
ho fatto questo utilizzando mysql
e non hanno mai avuto problemi. Quindi non sono sicuro di dove arrivano i problemi.
È necessario tenere a mente che i database NoSQL come MongoDB non dovrebbe avere rapporti. Questa è l'idea del database NoSQL. Se hai bisogno di una relazione tradizionale, dovresti prendere in considerazione l'utilizzo di un database SQL tradizionale (come MySQL o PostgreSQL). – Bald
Exacty, se vuoi avere molte relazioni, devi nidificare tutte le istanze degli utenti all'interno dell'oggetto Item, ad esempio '{ " users ": [ {" name ":" user1 "}, {" name ":" user2 " } ] } ' –
@Bald Suppongo che eloquente non abbia join, esso 'utilizza il caricamento impaziente. Quindi, cosa c'è di sbagliato nel recuperare alcuni dati associati. Ad esempio non hai intenzione di memorizzare l'oggetto utente all'interno di mai commenti di un post giusto? – Rob