1

単純なコードから始めましょう。私は次の2つのモデルを持っています。まず、MySQL を使用します。

class Phrase extends \Eloquent {

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

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

2番目は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 に答える