Prendere un valore int e collegarlo all id

Salve a tutti,

ho bisogno di aiuto per un problema che non riesco a risolvere. Ho questi due record:

IDAutore = 1
IParte = Ludovico
IIParte = Moro
RIDAutore = 2

IDAutore = 2
IParte = Marco
IIParte = Rossi
RIDAutore = 2

Come potete notare, il primo record ha un RID diverso dall’ID. Questo perché, nel caso ID e RID siano diversi, ho bisogno che mi venga stampato sia l’autore con ID, sia l’autore con il RID di riferimento. Dunque vorrei che mi fosse stampato:

Ludovico Moro >> Marco Rossi.

La condizione che ho implementato è questa:

$autore1 .= ($aut1[‘RIDAutore’] != $aut1[‘IDAutore’]) ? (…some code here…) : " ";

mi manca implementare la parte dove c’è “some code here” per collegare il RID all ID corrispondente. Spero di essere stato chiaro.
Grazie a tutti!!

Dovresti mettere il codice che stai usando… In linea di massima comunque questo si fa con le relazioni (hasOne nel tuo caso), quindi se configuri correttamente il modello poi diventerà (ad esempio):

$autore1 .= ArrayHelper::getValue($aut1->nomerelazione->IParte);

Ho capito grazie. Però nel modello dunque come lo configuro?

Ho inserito questo nel mio modello:

public function getRIDAutore()
{
return $this->hasOne(Autori::className(), [‘IDAutore’ => ‘RIDAutore’]);
}

è la strada giusta?

Direi di si, ora puoi usare la relazione per avere il l’autore collegato. L’arrayhelper è comoda perché ti toglie una condizione dal codice, così non devi valutare se c’è o meno la relazione valorizzata.

Quando ci sono nome e cognome poi io di solito faccio un attributo virtuale per averli concatenati, così useresti direttamente quello:

public function getNominativo() {
  return $this->nome ." ". $this->cognome;
}
...
// nel codice poi
echo $this->nominativo; 

ho risolto grazie!! La strada era quella indicata. Posto il codice qui nel caso dovesse servire:

Nel modello dichiaro la relazione:

public function getCorrelato() {
return Autori::findOne( $this->RIDAutore )->IParte;
}

Nell’index la mostro se RID e ID non combaciano:

$autore1 .= ($aut1[‘RIDAutore’] != $aut1[‘IDAutore’]) ? " >> ".($aut1->correlato) : " ";

Perché hai usato la find invece della relazione? Non è comunque la soluzione ottimale, se la find non trova niente avrai una exception.

con hasOne mi chiedeva due parametri, con la find mi è bastato solo dichiarare la relazione. Non mi esce la exception perché nell’index gli ho impostato la condizione (se non trova nulla, allora restituisce " ") in modo tale che dia sempre un valore, e mi funziona.