关于项目关系的问题。这是我得到的: 我有一个主表{{%page}},其中一个模型页面正在使用它。它包含视图中未来动态使用的所有数据。 我还有一个表{{%file}},其中包含特定页面的文件。关键是“builder_id”列。我创建了模型之间的关系 - 在'Page'
`public function getFiles() {
return $this->hasMany(File::className(),['builder_id' => 'builder_id']);
}`
和'文件'
public function getPage() {
return $this->hasOne(Page::className(), ['builder_id' => 'builder_id']);
}
目标:使用此方法获取Page模型时:
public static function getPageById ($builder_id = 1) {
$model = Page::find()->where(['builder_id' => $builder_id])->one();
if ($model === null) {
throw new NotFoundHttpException("Error.");
}
return $model;
}
还要在模型中记录页面的文件,其中builder_id是相同的。为此我使用->with()
,这使得页面方法如下:
public static function getPageById ($builder_id = 1) {
$model = Page::find()
->with('file')
->where(['builder_id' => $builder_id]);
if ($model === null) {
throw new NotFoundHttpException("Error.");
}
但在模型中,我既没有第一张表数据,也没有第二张。模型的Vardump给出了这个
object(yii\db\ActiveQuery)#64 (27) { ["sql"]=> NULL ["on"]=> NULL ["joinWith"]=> NULL ["select"]=> NULL ["selectOption"]=> NULL ["distinct"]=> NULL ["from"]=> NULL ["groupBy"]=> NULL ["join"]=> NULL ["having"]=> NULL ["union"]=> NULL ["params"]=> array(0) { } ["_events":"yii\base\Component":private]=> array(0) { } ["_behaviors":"yii\base\Component":private]=> array(0) { } ["where"]=> array(1) { ["builder_id"]=> string(1) "2" } ["limit"]=> NULL ["offset"]=> NULL ["orderBy"]=> NULL ["indexBy"]=> NULL ["modelClass"]=> string(15) "app\models\Page" ["with"]=> array(1) { [0]=> string(5) "files" } ["asArray"]=> NULL ["multiple"]=> NULL ["primaryModel"]=> NULL ["link"]=> NULL ["via"]=> NULL ["inverseOf"]=> NULL }
我做错了什么?
答案 0 :(得分:0)
请务必在查询后致电one()
或all()
。
public static function getPageById ($builder_id = 1) {
$model = Page::find()
->with('files') // here is you typo. You defined relationship with files and accessing it through file.
->where(['builder_id' => $builder_id])
->one(); // this line will return result.
if ($model === null) {
throw new NotFoundHttpException("Error.");
}
在您的情况下,您没有对ActiveQuery
对象执行任何操作。 您需要在查询对象上调用all()或one()来获取结果