让我们从一些简单的代码开始。我有两个以下型号。 首先是使用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)。
中答案 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();
无论如何,这个解决方案不是一个很好的替代品,因为它违反了惯例。第三个程序员可能不知道如何使用这种关系。