yii2 : bekomme keine Daten aus zwei Tabellen mit aktiven Datensatz
Ich möchte Daten aus zwei Tabellen comments
,users
.
comments
haben hasOne
Zusammenhang mit users
public function getUser()
{
return $this->hasOne(Users::className(), ['user_id' => 'user_id']);
}
möchte ich bekommen comments.comment_id
,comments.comment_content
,comments.user_id
aus comments
Tisch und uses.user_name
, users.user_display_name
aus users
Tabelle zu verwenden, in gridview
widget.
benutze ich
$res = Comments::find()
->select([
'comments.comment_id',
'comments.comment_content',
'comments.user_id',
'users.user_id',
'users.user_display_name',
'users.user_name',
])
->innerJoinWith('user')
->all();
diesem code bekommen comments
Feld, aber ich kann nicht users.user_name
,users.user_display_name
aus der Datenbank.
Wie soll ich es tun?
Hinweis: in der Tabelle user in der Datenbank ist users
aber wenn ich das Modell erstellen mit Gii,Verhältnis-Methode erklären, wie getUser()
ich weiß nicht, warum.
update 1:
comments
Tabelle:
DROP TABLE IF EXISTS `comments`;
CREATE TABLE `comments` (
`comment_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`comment_content` text NOT NULL,
`comment_approved` enum('no','yes') NOT NULL DEFAULT 'no',
`comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`comment_parent` bigint(20) unsigned NOT NULL DEFAULT '0',
`sms_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`user_id` bigint(20) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`comment_id`),
KEY `fk_comment_sms_id` (`sms_id`),
KEY `fk_commetn_user_id` (`user_id`),
CONSTRAINT `fk_comment_sms_id` FOREIGN KEY (`sms_id`) REFERENCES `sms` (`sms_id`),
CONSTRAINT `fk_commetn_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
users
Tabelle:
CREATE TABLE `users` (
`user_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(60) NOT NULL DEFAULT '',
`user_pass` varchar(64) NOT NULL DEFAULT '',
`user_level` int(11) NOT NULL DEFAULT '1',
`user_email` varchar(100) NOT NULL DEFAULT '',
`user_display_name` varchar(250) NOT NULL DEFAULT '',
`user_phone_number` varchar(11) NOT NULL,
`user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`user_activation_key` varchar(60) NOT NULL,
`user_status` enum('active','deactive','delete') NOT NULL DEFAULT 'deactive',
PRIMARY KEY (`user_id`),
UNIQUE KEY `u_user_sign` (`user_name`) USING BTREE,
UNIQUE KEY `u_user_email` (`user_email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;
Wie verwenden Sie
$res ist das model-Objekt(glaube ich) und ich benutze
Tun Sie alles mit
ja :), ty @Alex.es ist Arbeit
$res
zum anzeigen von Daten?$res ist das model-Objekt(glaube ich) und ich benutze
foreach($res as $comment)
, dann bekommen Wert mit dem Feldnamen wie : $comment->comment_content
. widget automatisch verwendet.Tun Sie alles mit
$comment->user->user_name
ja :), ty @Alex.es ist Arbeit
InformationsquelleAutor 123 | 2014-11-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, wie Sie Sie anzeigen oder testen, ob die Abfrage alle Daten, aber Sie sollten Lesen, auf die Beziehungen im Yii.
Die Arbeit mit Relationalen Daten
Lazy und Eager Loading
Mit lazy loading werden die Daten nicht vorhanden ist, bis Sie versuchen, darauf zuzugreifen, so erscheint möglicherweise nicht in Dinge wie
print_r
odervar_dump
var_dump
zu sehen, die Ergebnis-undvar_dump
hat limit diplay Ergebnis(i fix it).InformationsquelleAutor Alex
Empfehle ich die Umbenennung der Tabellen zu
comment
unduser
. Lesen Sie hier: Tabelle Benennung Dilemma: Singular vs. Plural-Namen, warum Sie verwenden sollten einzigartige Namen.Den Grund Gii erzeugt
getUser
und nichtgetUsers
ist, weil derhasOne
Beziehung. Es ist immer ein Benutzer - und nicht mehrere -Benutzers-Sind Sie sicher, dass die Beziehung definition korrekt ist? Ist
user_id
die PK in die Tabelle users und die FK in den Kommentaren Tisch? Und sind Sie sicher, dass es korrekt ist, die Daten in der DB?Und wenn man
print_r($comment)
in deiner foreach, sehen Sie den Benutzername und user_user_display_name?ich benutze @Alex-Hilfe im vor, und es ist Arbeit. verwenden
$comment->user->user_name
.InformationsquelleAutor jagsler