2014-06-13 5 views
0

Commençons par un code simple. J'ai deux modèles suivants. Tout d'abord utilise MySQL:Relations MongoDB & MySQL dans jenssegers/laravel-mongodb

class Phrase extends \Eloquent { 

    public function positions() 
    { 
     return $this->hasMany('Position'); 
    } 

    public function getIdAttribute($id) 
    { 
     return (int) $id; 
    } 
} 

et la seconde utilise MongoDB:

use Jenssegers\Mongodb\Model as Eloquent; 

class Position extends Eloquent { 

    protected $collection = 'positions'; 
    protected $connection = 'mongodb'; 

    public function phrase() 
    { 
     return $this->belongsTo('Phrase'); 
    } 
} 

Dans mon contrôleur, je veux obtenir des positions de phrase:

Phrase::find(1)->positions 

qui génère requête

positions.find({"positions.phrase_id":1}, []) 

au lieu de

positions.find({"phrase_id":1}, []) 

Comment puis-je résoudre ce problème? Le problème est dans la méthode HasMany (http://laravel.com/api/source-class-Illuminate.Database.Eloquent.Model.html#_hasMany).

Répondre

1

j'ai réussi à obtenir la fonctionnalité en créant ma propre fonction à l'intérieur du modèle

class Phrase extends \Eloquent { 

    public function positions() 
    { 
     return Position::where('phrase_id', '=', (int) $this->id)->get(); 
     return $this->hasMany('Position'); 
    } 
} 


$positions = Phrase::find(1)->positions(); 

Quoi qu'il en soit, cette solution n'est pas un remplacement, parce qu'il est convention de rupture. Les programmeurs tiers peuvent ne pas savoir comment utiliser cette relation.