gpt4 book ai didi

php - 在 Yii2 中连接表

转载 作者:行者123 更新时间:2023-11-29 02:50:45 25 4
gpt4 key购买 nike

我是新来的。

我已经阅读了很多关于连接表的答案,但似乎无法弄明白。

我想加入2个表我的 sap_items_slo 有很多列:(我需要 PropertyCode 和 PropertyName):

id  |   name  |  etc..  | PropertyCode | PropertyName
-----------------------------------------------------
5 |Product1 | etc.. | 1 | Fill
75 |Product2 | etc.. | 2 | RTG
55 |Product3 | etc.. | 2 | Implant

和其他带有列的表 propery_hr:

PropertyCode | PropertyName  
-----------------------------
1 | Fill2
2 | RTG2
3 | Implant2

他们看起来像这样。我想像这样使用它,以便它会为某些用户翻译 propertyNames。这些表来自不同的数据库。我可以调用第一个数据库并正确输出它,但是对于

userCountry = Yii::$app->user->identity->country;
if($userCountry == 'SomeCoutnry') {
*join tables(display ProperyName for each sap_items_slo PropertyCode from property_hr)*
}

这是我的代码SapItemsSearch.php

    public function search($params)
{

$query = SapItems::find()->where(['deleted'=>'no', 'sap_items_slo.country'=>Yii::$app->params['work_country']]);
$query->andWhere("ManufacturerCode !=86 and ManufacturerCode !=84 and ManufacturerCode !=83 and ManufacturerCode !=48");
$query->with(['sapPrice','image']);


$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 1000
]
]);

$this->load($params);

if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}

SapItemsController

    public function actionIndex()
{
$searchModel = new SapItemsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);

$js = "$('#imagemodal').on('shown.bs.modal', function (event) {
var button = $(event.relatedTarget);
var src = button.attr('rel');
var modal = $(this)
modal.find('.modal-body').html(\"<div style='text-align:center;'><img src='https://www.dental-medical.rs/upload/product/\"+src+\"' /></div>\");
})";

$this->getView()->registerJs($js);

return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}

我把它显示在 gridColumns 的 index.php 中

        $gridColumns = [
[
'attribute' => 'PropertyCode',
'label' => 'Property',
'value' => 'PropertyName',
'filter' => ArrayHelper::map(SapItems::find()->select('PropertyCode,PropertyName')->where('PropertyName<>""')->andWhere(['country'=>Yii::$app->params['work_country']])->distinct()->orderBy('PropertyName')->all(),'PropertyCode','PropertyName'),
'filterType'=>GridView::FILTER_SELECT2,
'filterWidgetOptions'=>[
'pluginOptions'=>['allowClear'=>true],
],
'filterInputOptions'=>['placeholder'=>'-- Property --'],
],

//And then echo gridView
echo GridView::widget([
'rowOptions'=> function ($model, $key, $index, $grid) {
if($model->OnHand > 0)
return ['class' => 'success'];
else
return ['class' => 'danger'];
},
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => $gridColumns,
'pjax' => false,
'layout' => '<div style="margin-bottom:10px;"><h2 style="font-size:25px;" class="panel-title pull-left"><i class="glyphicon glyphicon-user"></i> '.$this->title.'</h2><div class="pull-right">{toolbar}</div><div class="clearfix"></div></div>{items}<div class="pull-left" style="margin-top:-20px;">{pager}</div><div class="pull-right">{summary}</div><div class="clearfix"></div>',

我希望这是足够的信息,我在 Yii2 中得到了这个项目,但我不确定如何做。我尝试了多种方法但没有运气。感谢您的帮助!如果您希望我发布任何其他信息,请免费填写。

最佳答案

为了连接两个表并在带有过滤器的 gridview 中使用,你需要这些 sted

在您的 SapItems 模型中,您需要一个用于关系的公共(public)函数

我假设 propery_hr 表有一个名为 Property 的模型类

public function getProperty()
{
return $this->hasOne(Property::className(),
['PropertyCode' => 'PropertyCode']);
}

然后你可以为PropertyName建立一个getter

public function getPropertyName() {
return $this->property->PropertyName;
}

然后在您的 gridview 中您可以使用 PropertyName

<?= GridView::widget([
'dataProvider' => $dataProvider,
'summaryOptions' => ['class' =>'dfenx_pagination_summary',],
'pager' => ['options' => ['class'=> 'pagination pull-right']],
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
.....
'PropertyName',
.....

对于搜索和过滤,您必须在您的 seachModel 中添加一个用于过滤的公共(public)变量 ..

public $PropertyName;

并定义此变量可安全搜索

public function rules()
{
return [
...
[[ 'PropertyName', ], 'safe'],

];
}

在 SapItemsSearch 中你必须添加一个 joinwith you 关系

        if (!($this->load($params) && $this->validate())) {
$query->joinWith(['Property']);

return $dataProvider;
}

此时您可以使用 modelSearch 检索数据

->andFilterWhere(['like','PropertyName', $this->PropertyName])

您可以在此文档中找到解决您的问题的有用教程 http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/

关于php - 在 Yii2 中连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36284091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com