![](/img/trans.png)
[英]$a->b = new cl(); How to call $a->x() from within $a->b->c() without having to pass $a as an argument to c();
[英]Yii. How to establish relations and crud between three models (A->B->C)
甚至無法想象如何實現下一個功能。 我們有什么:
表1:應用
id-name-//其他列
表2:app_company
id-company_name-region_id-producer_id-//其他列
表3:app_region
id-region_name
我已經建立了下一個關系:應用程序模型(一對一關系):
return array(
'company_info' => array(self::HAS_ONE, 'AppCompany', 'applicant_id'),
);
AppCompany模型:
return array(
'application' => array(self::BELONGS_TO, 'Application', 'applicant_id'),
'region' => array(self::BELONGS_TO, 'AppRegion', 'region_id',)
);
AppRegion模型(順便說一句,我真的需要這個模型嗎?):
return array(
'company' => array(self::HAS_MANY, 'AppCompany', 'region_id',)
);
這是我的ApplicationContoller的actionCreate:
public function actionCreate()
{
$application = new Application;
$company = new AppCompany;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Application'], $_POST['AppCompany']))
{
$application->attributes=$_POST['Application'];
$company->attributes=$_POST['AppCompany'];
$valid=$application->validate();
$valid=$company->validate() && $valid;
if($valid)
{
if($application->save(false))
{
$company->applicant_id = $application->id;
$company->save(false);
$this->redirect(array('view','id'=>$application->id));
}
}
}
$this->render('create',array(
'application'=>$application,
'company'=>$company,
));
}
我的_form;
<?php echo $form->errorSummary(array($application, $company)); ?>
<!-- *** -->
<div class="row">
<?php echo $form->labelEx($company,'company_name'); ?>
<?php echo $form->textField($company,'company_name',array('size'=>60,'maxlength'=>75)); ?>
<?php echo $form->error($company,'company_name'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($application,'last_name'); ?>
<?php echo $form->textField($application,'last_name',array('size'=>50,'maxlength'=>50)); ?>
<?php echo $form->error($application,'last_name'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($company,'company_region_id'); ?>
<?php echo $form->dropDownList($company,'company_region_id', CHtml::listData(AppRegion::model()->findAll(), 'id', 'region_title_ru'), array('empty'=>'Выберите область')); ?> // PAY ATTENTION HERE
<?php echo $form->error($company,'company_region_id'); ?>
</div>
因此,在創建應用程序(並且“應用程序是父模型”)時,我可以通過下拉列表為AppCompany模型選擇區域標題。 因此,當我選擇app_region表中的“ Tashkent地區”時,我將此地區的ID(例如7)插入到app_company的region_id列中。
之后,我有一個查看文件:
<?php $this->widget('bootstrap.widgets.TbDetailView', array(
'data'=>$model,
'type'=>'striped bordered condensed',
'attributes'=>array(
'id',
//
'company_info.company_name',
'company_info.date_of_foundation',
'company_info.company_region_id' // HOW TO SHOW NO ID, BUT THE TITLE?
'last_name',
'first_name'
因此,問題是:是否可以顯示位於THIRD表中無法建立直接關系的區域名稱?
謝謝大家,我希望我能解釋清楚我需要什么。
好的,這就是我發現的內容將此添加到應用程序模型中:
return array(
'company_info' => array(self::HAS_ONE, 'AppCompany', 'applicant_id'),
'region'=>array(
self::HAS_ONE,'AppRegion',array('company_region_id'=>'id'),
'through'=>'company_info'
),
之后,我們可以:
<?php $this->widget('bootstrap.widgets.TbDetailView', array(
'data'=>$application,
'type'=>'striped bordered condensed',
'attributes'=>array(
'id',
//
'company_info.company_name',
'company_info.date_of_foundation',
'region.region_title_ru', // REGION NAME WOULD BE SHOWN HERE!
我還發現有可能像這樣:
$a->with('c.b')->find
但是在我的項目中還沒有意識到
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.