1

任何人都可以解释这种行为吗?十月CMS查询生成器无法获得关系模型

在例子中,两种型号:

人民,国家

人属于关联国家:

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

PS。 $person->country返回国模型和$person->country()返回查询生成器对象

+0

我看看为方法,而不是动态属性。我的错误是我尝试将方法应用于许多条目。我必须得到一个条目,然后调用方法,如下所示: Test \ TestPlugin \ Models \ People :: find(1) - > country() - > get(); – user2599458

0

而是调用关系法对整个模型,首先需要选择一个条目:

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

然后查询构建器返回的关系正是为了这个项目,不是对全部;

0

您可以向人民模型添加protected $with = ['country'];跃跃欲试负载的关系是一样的$person = People::with('country')->find(1);

然后你就可以访问的关系作为属性$person->country->name也尝试People::with('country')->get()代替People::country()->get()