2016-05-24 2 views
1

Je suis essayer de créer une relation entre les albums et les photos (un album a beaucoup de photos). Voici mon contrôleur et à quoi ressemblent mes modèles. Intéressant, la relation inverse photo-> album (belongsTo) fonctionne bien! mais l'album-> photos renvoie une collection vide.Laravel MongoDB hasMany relation ne fonctionne pas

## The hasMany relationship does NOT work... I get an empty collection 
<?php 
class AlbumController extends BaseController 
{ 
    public function show(Request $request, $album_id) 
    { 
     $album = Album::find($album_id); 
     dd($album->photos); 
    } 
} 

## Results: 
# Collection {#418 
# items: [] 
# } 


## The belgonsTo relationship works 
<?php 
class PhotoController extends BaseController 
{ 
    public function show(Request $request, $photo_id) 
    { 
     $photo = Photo::find($photo_id); 
     dd($photo->album); 
    } 
} 

<?php 

namespace App; 

use DB; 
use Jenssegers\Mongodb\Eloquent\SoftDeletes; 
use Moloquent; 

class Album extends Moloquent 
{ 
    use RecordActivity, SoftDeletes; 

    protected $connection = 'mongodb'; 
    protected $table = 'albums'; 
    protected $collection = 'albums'; 
    protected $primaryKey = "_id"; 
    protected $dates = ['deleted_at']; 
    protected $fillable = ['user_id','name','is_private']; 

    public function photos() 
    { 
     // Neither seems to work 
     //return $this->embedsMany('Photo'); 
     return $this->hasMany('App\Photo'); 
    } 
} 

<?php 

namespace App; 

use DB; 
use Jenssegers\Mongodb\Eloquent\SoftDeletes; 
use Moloquent; 

class Photo extends Moloquent 
{ 
    use RecordActivity, SoftDeletes; 

    protected $connection = 'mongodb'; 
    protected $table = 'photos'; 
    protected $collection = 'photos'; 
    protected $primaryKey = "_id"; 
    protected $dates = ['deleted_at']; 
    protected $fillable = ['album_id', 'user_id', 'name', 'folder', 'is_private', 'caption']; 
    protected $hidden = []; 

    // user and album belongsTo works 
    public function user() 
    { 
     return $this->belongsTo('App\User'); 
    } 

    public function album() 
    { 
     return $this->belongsTo('App\Album'); 
    } 
} 
+0

Je sais que ce n'est pas une réponse directe à votre question mais ne pensez-vous pas que votre relation devrait être Beaucoup trop? Un album peut avoir beaucoup de photos mais un autre album peut aussi avoir les mêmes photos? –

+1

Quelle version de jenssegers/mongodb utilisez-vous? Aussi quelle version de mongodb? – PiKos

+1

Vous pouvez également essayer d'imprimer des requêtes. Exemple: ** DB :: connection() -> enableQueryLog(); $ photos = $ album-> photos; dd (DB :: getQueryLog()); ** – PiKos

Répondre

0

La question avait à voir avec le fait que mes ID étaient ObjectID et il semble être un problème avec Jessengers Laravel MongoDB pilotes ... nous avons effectivement décidé de revenir à MariaDB pour utiliser pleinement Eloquent/Relations

0

J'ai fait la même chose que la vôtre et j'ai trouvé que rien de mal avec Mongodb. Parce que Mongodb a défini le "_id" comme clé primaire et c'est la raison pour laquelle il n'a pas pu obtenir la relation correcte: belongsTo et hasMany. Donc j'ai fait un petit changement en déclarant le $ primaryKey = "id" sur le dessus du parent Model et ça a bien fonctionné