MongoDB& jenssegers / laravel-mongodb中的MySQL关系

时间:2014-06-13 13:40:47

标签: mongodb laravel jenssegers-mongodb

让我们从一些简单的代码开始。我有两个以下型号。 首先是使用MySQL:

class Phrase extends \Eloquent {

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

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

,第二个是使用MongoDB:

use Jenssegers\Mongodb\Model as Eloquent;

class Position extends Eloquent {

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

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

在我的控制器中,我希望获得短语位置:

Phrase::find(1)->positions

正在生成查询

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

而不是

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

我该如何解决?问题出在HasMany方法(http://laravel.com/api/source-class-Illuminate.Database.Eloquent.Model.html#_hasMany)。

1 个答案:

答案 0 :(得分:1)

我设法通过在模型中创建自己的函数来获得功能

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();

无论如何,这个解决方案不是一个很好的替代品,因为它违反了惯例。第三个程序员可能不知道如何使用这种关系。