1

让我们从一些简单的代码开始。我有两个以下模型。首先是使用 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)。

4

2 回答 2

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

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

于 2014-06-13T13:47:34.147 回答
0

在两个模型中都使用这个特征,你可以使用基本关系

use Jenssegers\Mongodb\Eloquent\HybridRelations;

class User extends Model 
{
   protected $connection = "mysql" ;

   use HybridRelations ;

}

class Orders extends Model 
{
   protected $connection = "mongo" ;

   use HybridRelations ;
}
于 2021-09-01T12:10:24.370 回答