yii2 : non è possibile ottenere i dati da due tabelle con record attivo

Voglio ottenere i dati da due tabelle comments,users.

comments hanno hasOne relazione con users

public function getUser()
    {
        return $this->hasOne(Users::className(), ['user_id' => 'user_id']);
    }

voglio ottenere comments.comment_id,comments.comment_content,comments.user_id da comments tavolo e uses.user_name , users.user_display_name da users in una tabella gridview widget.

io uso

$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();

questo codice ottenere comments campo, ma non riesco a users.user_name,users.user_display_name dal database.

Come devo fare?

nota: l’utente tabella nel database è users ma quando vado a creare il modello con Gii,relazione metodo di dichiarare come getUser(), non so perché.

aggiornamento 1:

comments tabella:

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 tabella:

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;
  • Come si utilizza $res per visualizzare i dati?
  • $res, oggetto del modello(credo) e io uso foreach($res as $comment), quindi ottenere il valore del campo nome come : $comment->comment_content. widget automaticamente.
  • Non si ottiene nulla con $comment->user->user_name
  • sì :), ty @Alex.e ‘ un lavoro
InformationsquelleAutor 123 | 2014-11-05



2 Replies
  1. 3

    Non sono sicuro di come si sta visualizzando o il test, se la query ha restituito dati, ma si dovrebbe leggere su relazioni Yii.

    Utilizzo di Dati Relazionali

    Pigro e Desideroso di Caricamento

    Con il lazy loading, i dati non esiste fino a quando si tenta di accedere non può quindi apparire le cose come print_r o var_dump

    • io uso xdebug e var_dump vedere il risultato e var_dump è il limite di visualizzare il risultato(i fix).
  2. 2

    Mi consiglia di rinominare le tabelle per comment e user. Leggi qui: Tabella Denominazione Dilemma: Singolare vs. Nomi Plurali perché si dovrebbe usare nomi singolari.

    Il motivo Gii genera getUser e non getUsers è a causa della hasOne rapporto. E ‘ sempre un utente e non un utente di piùs

    Sei sicura che la definizione del rapporto è corretto? È user_id il PK della tabella users e FK nella tabella commenti? E sei sicuro che ci sia un corretto dati nel DB?

    • aggiornamento tabelle, query, io uso navicat per immettere i dati nel db e sono sicuro che ci sia corretto i dati nel DB
    • E se si fa un print_r($comment) nel foreach, si fa vedere la nome_utente e user_user_display_name?
    • io uso @Alex aiutare in precedenza, ed è il lavoro. utilizzare $comment->user->user_name.

Lascia un commento