Reputation: 21
First table : user_id - primary key username password
Second table: user_equip_id - primary key phone_model phone_model_series phone_date_acq nb_sg_model nb_sg_date_acq display_model display_series display_date_acq user_for_id - foreign key to user_id from table1
I want when i see equipemnts to be associated to an username, but when i go to view it says it's not set even if i have made the function getUsername in model. I don't know how to get the username from the first table associated by foreign key. If you can give any help i thank you very much.
Controller :
<?php
namespace app\controllers;
use Yii;
use app\models\Equipment;
use app\models\EquipmentSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
/**
* EquipmentController implements the CRUD actions for Equipment model.
*/
class EquipmentController extends Controller
{
/**
* {@inheritdoc}
*/
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['POST'],
],
],
];
}
/**
* Lists all Equipment models.
* @return mixed
*/
public function actionIndex()
{
$searchModel = new EquipmentSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
/**
* Displays a single Equipment model.
* @param integer $id
* @return mixed
* @throws NotFoundHttpException if the model cannot be found
*/
public function actionView($id)
{
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
/**
* Creates a new Equipment model.
* If creation is successful, the browser will be redirected to the 'view' page.
* @return mixed
*/
public function actionCreate()
{
$model = new Equipment();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->user_equip_id]);
}
return $this->render('create', [
'model' => $model,
]);
}
/**
* Updates an existing Equipment model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id
* @return mixed
* @throws NotFoundHttpException if the model cannot be found
*/
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->user_equip_id]);
}
return $this->render('update', [
'model' => $model,
]);
}
/**
* Deletes an existing Equipment model.
* If deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id
* @return mixed
* @throws NotFoundHttpException if the model cannot be found
*/
public function actionDelete($id)
{
$this->findModel($id)->delete();
return $this->redirect(['index']);
}
/**
* Finds the Equipment model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* @param integer $id
* @return Equipment the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findModel($id)
{
if (($model = Equipment::findOne($id)) !== null) {
return $model;
}
throw new NotFoundHttpException('The requested page does not exist.');
}
}
Model:
<?php
namespace app\models;
use Yii;
/**
* This is the model class for table "equipment".
*
* @property int $user_equip_id
* @property string|null $phone_model
* @property string $phone_series
* @property string $phone_date_acq
* @property string $nb_sg_model
* @property string $nb_sg_series
* @property string $nb_sg_date_acq
* @property string $display_model
* @property string $display_series
* @property string $display_date_acq
* @property int $user_for_id
*
* @property User $userFor
*/
class Equipment extends \yii\db\ActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'equipment';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['phone_series', 'phone_date_acq', 'nb_sg_model', 'nb_sg_series', 'nb_sg_date_acq', 'display_model', 'display_series', 'display_date_acq', 'user_for_id'], 'required'],
[['phone_date_acq', 'nb_sg_date_acq', 'display_date_acq'], 'safe'],
[['user_for_id'], 'integer'],
[['phone_model', 'phone_series', 'nb_sg_model', 'nb_sg_series', 'display_model', 'display_series'], 'string', 'max' => 50],
[['user_for_id'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['user_for_id' => 'user_id']],
[['username'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['username' => 'username']],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'user_equip_id' => 'User Equip ID',
'phone_model' => 'Phone Model',
'phone_series' => 'Phone Series',
'phone_date_acq' => 'Phone Date Acq',
'nb_sg_model' => 'Nb Sg Model',
'nb_sg_series' => 'Nb Sg Series',
'nb_sg_date_acq' => 'Nb Sg Date Acq',
'display_model' => 'Display Model',
'display_series' => 'Display Series',
'display_date_acq' => 'Display Date Acq',
'user_for_id' => 'User For ID',
'username' => 'Username',
];
}
/**
* Gets query for [[UserFor]].
*
* @return \yii\db\ActiveQuery|yii\db\ActiveQuery
*/
public function getUserFor()
{
return $this->hasOne(User::className(), ['user_id' => 'user_for_id']);
}
public function getUsername()
{
return $this->hasOne(User::className(), ['username' => 'username']);
}
/**
* {@inheritdoc}
* @return EquipmentQuery the active query used by this AR class.
*/
public static function find()
{
return new EquipmentQuery(get_called_class());
}
}
View:
<?php
use yii\helpers\Html;
use yii\grid\GridView;
/* @var $this yii\web\View */
/* @var $searchModel app\models\EquipmentSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */
$this->title = 'Equipments';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="equipment-index">
<h1><?= Html::encode($this->title) ?></h1>
<p>
<?= Html::a('Create Equipment', ['create'], ['class' => 'btn btn-success']) ?>
</p>
<?php // echo $this->render('_search', ['model' => $searchModel]); ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'username',
#'user_equip_id',
'phone_model',
'phone_series',
'phone_date_acq',
'nb_sg_model',
'nb_sg_series',
'nb_sg_date_acq',
'display_model',
'display_series',
'display_date_acq',
//'user_for_id',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
</div>
Upvotes: 0
Views: 242
Reputation: 18021
Your getUsername()
method implicates that there is foreign key username
in the equipment
and user
table which is not true.
To get username
of the user use the relation method you already set like:
$equipment->userFor->username;
userFor
calls getUserFor()
and returns the relation model from which you can get username
.
In the GridView you can use userFor.username
to get this value on the grid.
I can see you have set the username
in the equipment's rules which implicates you want to pass it to the model when creating or updating it - since this is not an equipment's field it will not make equipment and user connected without extra code you need to prepare first.
Upvotes: 1