Ich habe 3 Klassen Persona, Alumno und factura. Ich muss die Person Fullname, auf Faktura mit der Gridview und der Suchfunktion zeigen. Der vollständige Name ist in Persona. Factura bezieht sich nur auf alumno durch id_alumno und alumno ist auf persona durch id_persona bezogen. Ich versuche, dies zu lösen, indem ich eine neue Variable fullname und eine Funktion, um persona auf der Klasse factura zu erhalten.Wie man Daten von nicht direkt verwandten Tabellen erhält Yii2
class Factura extends \yii\db\ActiveRecord{
public $full_name;
}
public static function tableName()
{
return 'factura';
}
public function rules()
{
return [
[['id_factura_reemplazo', 'id_obra_social', 'id_alumno',], 'integer'],
[['id_obra_social', 'id_alumno'], 'required'],
[['fecha_factura','fullname','id_persona'], 'safe'],
];
}
public function attributeLabels()
{
return [
'id_factura' => 'Id Factura',
'id_factura_reemplazo' => 'Id Factura Reemplazo',
'id_obra_social' => 'Id Obra Social',
'id_alumno' => 'Id Alumno',
'fullName'=>Yii::t('app', 'Nombre y Apellido'),
];
}
public function getIdAlumno()
{
return $this->hasOne(Alumno::className(), ['id_alumno' => 'id_alumno']);
}
public function getIdPersona() {
return $this->hasOne(Persona::className(), ['id_persona' => 'id_persona'])
->via('idAlumno');
}
public function getFullname(){
return $this->idPersona->nombre." ".$this->idPersona->apellido;
}
Ich bekomme und Fehler auf der Rückleitung.
PHP Notice - yii \ base \ Error
Der Versuch, Eigentum von Nicht-Objekt
public function getFullname(){
return $this->idPersona->nombre." ".$this->idPersona->apellido;
}
erste Problem
Jetzt bekomme ich Fix zu bekommen: Ungültige Anruf - yii \ base \ InvalidCallException
Festlegen der schreibgeschützten Eigenschaft: app \ models \ Facturasearch :: fullname
if (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
} else {
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
es ist wie es die Getter ... das Problem Sprung von der Linie haben tut, wenn er versucht $ this-> Last ($ params) zu tun;
class Facturasearch extends Factura{
public function rules()
{
return [
[['id_factura', 'id_factura_reemplazo', 'id_alumno', 'numero'], 'integer'],
[['id_obra_social','fecha_factura', 'observacion','id_alumno','fullName','id_persona'], 'safe'],
];
}
public function search($params)
{
$query = Factura::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
...
der erste Chek hat es repariert, danke, aber ich kann nicht die FacturaSearch Arbeit machen. Die ID ist korrekt, sie heißen id_persona und id_alumno. Ich füge den Fehler hinzu, den ich bekomme. – chatoxz