2016-11-11 20 views
1

我有3個角色Persona,Alumno和factura。我需要使用gridview和搜索功能在factura視圖上顯示人員全名。全名在Persona。 Factura僅通過id_alumno與alumno相關,而alumno通過id_persona與persona相關。 我嘗試通過創建一個新的變量全名和一個函數來獲得角色事實上的角色來解決這個問題。如何從不直接相關的表中獲取數據並在gridview上使用modelSearch()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(){ 
    if($this->idPersona) 
    return $this->idPersona->nombre." ".$this->idPersona->apellido; 
    return null; 
} 

我得到: 無效呼叫 - 警予\基地\ InvalidCallException

設置只讀屬性:應用程序\型號\ Facturasearch ::全名

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

就好像它不具備getter ...當它試圖執行$ 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 scenarios() 
{ 
    // bypass scenarios() implementation in the parent class 
    return Model::scenarios(); 
} 
public function search($params) 
{ 
    $query = Factura::find(); 

    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
    ]); 

    $this->load($params); 
    ... 
+0

看看這個..回答http://stackoverflow.com/questions/38994984/how-to-show-yii2 -database-relation-in-view – scaisEdge

+0

這是我使用的,但我的問題超出了這個範圍。 – chatoxz

+0

對不起,我沒有深入瞭解你的問題..但錯誤似乎與搜索功能有關...何時/何地出現錯誤..是否打電話給相關控制器/操作或之後當你過濾搜索時會顯示gridview? – scaisEdge

回答

1

你應該FacturaSearch添加pubblic變種的全名

class Facturasearch extends Factura{ 

    public $fullname; 


    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 scenarios() 
    { 
     // bypass scenarios() implementation in the parent class 
     return Model::scenarios(); 
    } 
    public function search($params) 
    { 
     $query = Factura::find(); 

     $dataProvider = new ActiveDataProvider([ 
      'query' => $query, 
     ]); 

     $this->load($params); 
     ... 
+0

謝謝scaisEdge的努力,但我仍然得到相同的錯誤。我也在factura模型上添加了公共$全名,但沒有運氣。 – chatoxz

+0

沒有在Factura模型...不..在事實模型你有吸氣.. – scaisEdge

+0

我是sory,我不明白你在說什麼。我把它就像你的答案,我不工作。 – chatoxz

相關問題