我有3個角色Persona,Alumno和factura。我需要使用gridview和搜索功能來顯示person的全名。全名在Persona。 Factura僅通過id_alumno與alumno相關,而alumno通過id_persona與persona相關。 我嘗試通過創建一個新的變量全名和一個函數來獲得角色事實上的角色來解決這個問題。如何從直接相關的表中獲取數據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的通知 - 警予\基地\ ErrorException
試圖讓非對象的屬性
public function getFullname(){
return $this->idPersona->nombre." ".$this->idPersona->apellido;
}
1號問題解決
現在我得到: 無效呼叫 - 警予\ base \ InvalidCallException
設置只讀屬性:app \ models \ 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);
}
就好像它不具有吸...從線路的問題,跳的時候它會嘗試做這 - $>負載($ 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);
...
第一個chek確實修復了它,謝謝,但我無法使FacturaSearch工作。該ID是正確的,它們都被命名爲id_persona和id_alumno。我會添加我得到的錯誤。 – chatoxz