PDA

View Full Version : مشکل در نمایش رکورد جدول های رابطه ای در گرید ویو yii2



Borland.C
شنبه 15 خرداد 1395, 07:46 صبح
2تا جدول دارم که در یکیش آی دی افراد و در دیگری مشخصات رو نگهداری میکنم
وقتی می خوام در گرید ویو نمایش بدم فیلدهای جدول دوم رو نشون نمیده و (not set) میزنه

model:

public function getProfile()
{
return $this->hasOne(Profile::className(), ['id' => 'profile']);
}

Controller:

$dataProvider = new ActiveDataProvider([
'query' => Person::find()->joinWith("profile")->where(['family'=>$id]),
]);
//----------- OR ---------------------------
$dataProvider = new ActiveDataProvider([
'query' => Person::find()->with("profile")->where(['family'=>$id]),
]);


view:

GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
'profile.fname',
[
'attribute' => 'profile',
'value' => 'profile.id'
],
],
]),

table person:

CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` int(11) DEFAULT NULL,
`family` int(11) DEFAULT NULL,
`profile` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `family_idx` (`family`),
KEY `profile_idx` (`profile`),
CONSTRAINT `family` FOREIGN KEY (`family`) REFERENCES `family` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `profile` FOREIGN KEY (`profile`) REFERENCES `profile` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

table profile:

CREATE TABLE `profile` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fname` varchar(45) COLLATE utf8_bin DEFAULT NULL,
`lname` varchar(45) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Borland.C
شنبه 15 خرداد 1395, 14:52 عصر
کیوری که می سازه اینه:

SELECT `person`.* FROM `person` LEFT JOIN `profile` ON `person`.`profile` = `profile`.`id` WHERE `family`='1' LIMIT 20
فقط فیلدهای person انتخاب میشن:افسرده:

Borland.C
یک شنبه 16 خرداد 1395, 21:04 عصر
حل شد http://forum.iranphp.org/images/smilies/biggrin.gif
با توجه با تعریف alias مشکل رفع میشد حدس زدم شاید مشکل از هم نام بودن فیلد profile در جدول person با نام رابطه profile باشه برای تست فیلد profile رو به profile_id تغییر دادم حل شد http://forum.iranphp.org/images/smilies/rolleyes.gif
(البته طبیعتا مدل ها رو هم ویرایش کردم ،اینو گفتم تا اگر شخص دیگه ای همین مشکل داشت سر در گم نشه)