任何人都可以解释这种行为吗?
例如,两个模型:
人,国家
人属于国家:
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,
},
],
}
我看到People#1与Country#1有关系,但当我尝试在查询构建器中获取此关系时,它返回空集合:
>>> Test\TestPlugin\Models\People::country()->get();
=> October\Rain\Database\Collection {#970
all: [],
}
>>>
为什么?
答案 0 :(得分:0)
您应首先获取People模型,然后您可以获取特定模型的Country。
这样的事情:
$people = Test\TestPlugin\Models\People::all();
foreach ($people as $person){
$country = $person->country;
# do something with the country
}
PS。 $person->country
返回国家/地区模型,$person->country()
返回查询构建器对象
答案 1 :(得分:0)
相反,要在整个模型上调用关系方法,首先需要选择一个条目:
Test\TestPlugin\Models\People::find(1)->country()->get();
然后查询构建器返回关系完全针对此条目,而不是全部;
答案 2 :(得分:0)
您可以将protected $with = ['country'];
添加到您的人员模型中,以便加载与$person = People::with('country')->find(1);
然后,您可以将该关系作为属性$person->country->name
访问,同时尝试People::with('country')->get()
而不是People::country()->get()