2017-09-02 2 views
1

Iは、モデルからコードの戻りデータの下のモデルBメソッド連鎖を使用して、Laravel Eloquentの遠隔リレーションシップモデルからデータをretieveする方法はありますか?

App\A::find(id)->relateAB()->get(); 

からコードの戻りデータの下C.

//Model Code 

class A extends Model 
{ 
    //This relates A and B 
    public function relateBC(){ 
     return $this->hasOne('App\B','aid','aid'); 
    } 
} 

class B extends Model 
{ 
    //Inverse relationship with Model A 
    public function relateBC(){ 
     return $this->belongsTo('App\A','aid','aid'); 
    } 

    //This relates B and C 
    public function relateBC(){ 
     return $this->hasMany('App\C','bid','bid'); 
    } 
} 


class C extends Model 
{ 
    //Inverse relationship with Model B 
    public function post(){ 
     return $this->belongsTo('App\B','bid','bid'); 
    } 
} 

とBとB hasManyの関係にA、BおよびC A hasOneの関係モデルを有しますC

App\B:find(id)->relateBC()->get();   

以下のコードはBadMethodExceptionをスローします。メソッドrelateBC()は存在しません。

App\A::find(id)->relateAB->relateBC()->get();  

+0

ようこそstackoverflow。特定の問題のコードを提供してください。それはあなたがどれだけ試してみたのかを証明し、他のメンバーがあなたの問題をより良く理解するのを助けます。その時、あなたは問題の文脈を与えます。これらのリンクを確認してください:https://stackoverflow.com/help/mcveそしてhttps://stackoverflow.com/help/how-to-ask –

答えて

0

これを試してみてください:方法(すなわち->relateAB())、あなたはHasOne relationship object(あなたが->get()を呼び出すことができるオブジェクトを)取り戻すとしてアクセス

$distantRelations = App\A::find($id)->relateAB->relateBC; 

、一方魔法プロパティとしてアクセスされた場合(つまり、 - > relateAB)、モデルインスタンス(関係relateBCにアクセスできるオブジェクト)を返します。

あなた代わりにマジックプロパティのメソッドを使用していますが、その後、関係型を決定しなければならない一つである心の中で(1対多数)を保持し、基礎となるのいずれか->get()または->first()を呼び出すことができますそれぞれのクエリビルダ:

あなたはを呼び出す HasOneを目撃することができます first()

を呼び出す

$distantRelations = App\A::find($id) 

    // 'relateAB' is a singular relation, 
    // so we'll need to call 'first()' 

    ->relateAB()->first() // > App\B 

    // 'relateBC' is a 'many' relation, 
    // so we'll need to call 'get()' 

    ->relateBC()->get(); // > App\C[]|\Illuminate\Support\Collection 

HasOne 0クエリービルダーat this lineであなたのために、マジックプロパティとしてリレーションにアクセスすることによって実行されます。あなたは魔法のプロパティとしての関係をアクセスすることによって実行されたクエリビルダat this line、上のあなたのためのget()を呼び出しHasManyを目撃することができますget()

を呼び出す

HasMany

+0

私はBadMethodCallExceptionを持っています。「未定義メソッドを呼び出してください。 Database \ Query \ Builder :: relateAB() ' – Fynix

+0

あなたの質問を関連コードで更新してください(不必要なものを削除してください)。 3つのモデルと関連する関連メソッドを含めます。また、データベーステーブルに関するいくつかの情報(名前、主キー列の名前)が役立ちます。 –

+0

モデルコードが含まれています。 – Fynix

0

ピボットテーブルのAモデルとBモデルの主キー、つまり両方のテーブルの外部キーとして宣言します。

関連する問題