簡體   English   中英

如何從不直接相關的表中獲取數據Yii2

[英]How to get data from not directly related tables Yii2

我有3類Persona,Alumno和factura。 我需要使用gridview和搜索功能在factura上顯示人員的全名。 全名在Persona中。 Factura僅通過id_alumno與校友相關,而alumno通過id_persona與角色相關。 我試圖通過創建一個新的變量全名和一個函數來解決類上的角色來解決此問題。

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;
}

我在返回線上出現錯誤。

PHP公告– yii \\ base \\ ErrorException

試圖獲取非對象的屬性

public function getFullname(){
   return $this->idPersona->nombre." ".$this->idPersona->apellido;
}

第一個問題修復

現在我得到:無效的呼叫– yii \\ base \\ InvalidCallException

設置只讀屬性: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);
    }

就像它沒有吸氣劑...當它嘗試執行$ this-> load($ params);時,問題從一行跳出;

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);
    ...

最好先檢查是否從關系中獲取屬性,然后再嘗試訪問它:

public function getFullname()
{
    if ($this->idPersona) {
        return $this->idPersona->nombre." ".$this->idPersona->apellido;
    }
    return null;
}

但這不是這里的問題。 似乎該關系未正確配置。

如果Alumno模型表中的主鍵確實是id_alumnoPersona模型表中的主鍵確實是id_persona該關系可能設置正確,但是通常主鍵只是命名為id ,在這種情況下,該關系應為:

public function getIdAlumno()
{
    return $this->hasOne(Alumno::className(), ['id' => 'id_alumno']);
}

public function getIdPersona()
{
    return $this->hasOne(Persona::className(), ['id' => 'id_persona'])->via('idAlumno');
}

如果是這種情況,上述內容應會有所幫助。 如果沒有,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM