2016-11-11 13 views
0

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

返品行にエラーが表示されます。

PHPお知らせ - のYii \ベースの\ 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 - >負荷($のparams)を行おうとするとき、それはゲッター...ラインから問題のジャンプを持っているdoesntのようなものです。

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

答えて

1

それは関係の属性がアクセスしようとする前にフェッチされた場合は、最初のチェックがベストです:

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

この場合、上記が役立つはずです。もしそうでなければ - 知らせてください。

+0

最初のチックはそれを修正しましたが、ありがとう、私はFacturaSearchの仕事をすることはできません。 idは正しいです、それらはどちらもid_personaとid_alumnoという名前です。私は私が得るエラーを追加します。 – chatoxz

関連する問題