私は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);
...
はこれを見てとるためのFacturaSearchでpubblic VARを追加する必要があります。.. http://stackoverflow.com/questions/38994984/how-to-show-yii2に答えます-database-relation-in-view – scaisEdge
これは私が使っているものですが、私の問題はそれを超えています。 – chatoxz
あなたの質問を深く見ていないのはごめんなさい申し訳ありませんが、エラーは検索機能に関連しているようです...いつどこでエラーが発生しましたか?関連するコントローラ/アクションを呼び出すか、検索のためにフィルタリングすると、gridviewが表示されますか? – scaisEdge