2016-11-11 5 views
1

私は3つのクラスのPersona、Alumno、facturaを持っています。私は、フルビューの人にフルネーム表示するには、gridviewと検索機能を使用する必要があります。フルネームはPersonaにあります。ファクトゥーラはid_alumnoを通して卒業生にしか関連しておらず、卒業生はid_personaによって個人と関連しています。 私は、新しい変数fullnameと、クラスfactura上のペルソナを取得する関数を作成することでこれを解決しようとしています。直接関連するテーブルからデータを取得し、modelSearch()でgridviewで使用する方法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; 
} 

私が手: 無効なコール - 読み取り専用のプロパティを設定するのYii \ベースの\ InvalidCallException

:アプリの\モデルを\ 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); 
    } 

それが持っているdoesntのようなものです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

はこれを見てとるためのFacturaSearchでpubblic VARを追加する必要があります。.. http://stackoverflow.com/questions/38994984/how-to-show-yii2に答えます-database-relation-in-view – scaisEdge

+0

これは私が使っているものですが、私の問題はそれを超えています。 – chatoxz

+0

あなたの質問を深く見ていないのはごめんなさい申し訳ありませんが、エラーは検索機能に関連しているようです...いつどこでエラーが発生しましたか?関連するコントローラ/アクションを呼び出すか、検索のためにフィルタリングすると、gridviewが表示されますか? – scaisEdge

答えて

1

あなたはフルネーム

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

の努力のおかげで、関数の検索のための質問を更新し、すべてのコードを追加しますが、私はまだ同じエラーが発生します。私もfacturaモデルにpublic $ fullnameを追加しましたが、運はありません。 – chatoxz

+0

ファクトゥラモデルではありません...ファクトゥラモデルではゲッターがあります。 – scaisEdge

+0

私はソリです、あなたが言っていることは分かりません。私はあなたの答えのようにそれを入れて、私は仕事をしません。 – chatoxz

関連する問題