1

誰もこの動作を説明できますか?例では10月CMSクエリビルダがリレーションモデルを取得できません

、二つのモデル:

人、国

人々belongsToの国:

public $belongsTo = [                                               
    'country' => [                                                 
     'Test\TestPlugin\Models\Country',                                           
    ] 

私は、各モデルのエントリを作成し、それを関連付けます。

ティンカー・ダンプがあります:

>>> Test\TestPlugin\Models\People::all();                                           
=> October\Rain\Database\Collection {#926                                           
    all: [                                                   
     Test\Testplugin\Models\People {#928                                           
     id: 1,                                                  
     country_id: 1,                                                
     },                                                   
     Test\Testplugin\Models\People {#930                                           
     id: 2,                                                  
     country_id: 0,                                                
     },                                                   
    ],                                                    
    }  

>>> Test\TestPlugin\Models\People::with('country')->get();                                       
=> October\Rain\Database\Collection {#963 
    all: [ 
     Test\Testplugin\Models\People {#943 
     id: 1, 
     country_id: 1, 
     country: Test\Testplugin\Models\Country {#965 
      id: 1, 
      name: "Russia", 
     },                                                   
     },                                                   
     Test\Testplugin\Models\People {#945 
     id: 2, 
     country_id: 0, 
     country: null, 
     },                                                   
    ],                                                    
    }   

私は人々#1は、国の#1との関係を持っていますが、私は、クエリビルダでこの関係を取得しようとすると、それは空のコレクションを返すことを参照してください。

>>> Test\TestPlugin\Models\People::country()->get();                                        
=> October\Rain\Database\Collection {#970 
    all: [], 
    }                                                    
>>> 

なぜですか?

答えて

0

まず、Peopleモデルを取得してから、特定のモデルの国を取得する必要があります。このような

何か:

$people = Test\TestPlugin\Models\People::all(); 
foreach ($people as $person){ 
    $country = $person->country; 
    # do something with the country 
} 

PS。 、まさにこのエントリの

Test\TestPlugin\Models\People::find(1)->country()->get(); 

その後、クエリビルダリターン関係ありません:国のモデルと$person->country()がモデル全体に​​関係のメソッドを呼び出すためのクエリビルダオブジェクトの代わりに

+0

を試してみてください動的プロパティではなくメソッドのために。私の間違いは、私は多くの項目にメソッドを適用しようとしています。私は1つのエントリを取得し、メソッドを呼び出す必要があります: Test \ TestPlugin \ Models \ People :: find(1) - > country() - > get(); – user2599458

0

、一つのエントリを選択するための最初の必要性を返します$person->countryすべてのために;あなたが熱心な負荷にあなたの人々のモデルに$person = People::with('country')->find(1);

と同じである関係をprotected $with = ['country'];を追加することができます

0

その後、プロパティ$person->country->nameような関係にアクセスすることができ、また、私は見てよPeople::with('country')->get()代わりのPeople::country()->get()

関連する問題