繁体   English   中英

Yii2:如何显示两个相关表中的数据?

[英]Yii2: how to show data from two related tables?

我有表人员(id_person,name_person,id_color)和表颜色(id_color,name_color)

我需要在Select2组件中显示人员名称和每个人的颜色名称。

我正在使用与kartik-v / yii2-widget-select22 amigos /yii2-select2-widget非常相似的Select2组件。

我可以用SQL查询创建一个数组,但是我想知道Yii2是否提供了更好,更简单的解决方案。

此解决方案有效,但我认为这不是最佳解决方案:

public function personsList()
{
    $persons = \app\models\Persons::find()->orderBy('name_person')->all();
    $personsList = yii\helpers\ArrayHelper::map($persons, 'id_person', function($persons) {
        $color = \app\models\Colors::findOne(['id_color' => $persons->id_color]);
        $name_color = $color->name_color;
        return $persons->name_person . ' - ' . $name_color;
    });

    return $personsList;
}

我希望有人可以改善它。

如果您定义了模型之间的关系,则更简洁,更优化的方法可能如下所示。

我假设您在Persons模型中具有名称getColor()的关系。 将函数personsList()更改为以下内容。

public function personsList() {
     $persons = rsons::find()->with('color')->orderBy('name_person')->all();
     return ArrayHelper::map($persons, 'id_person', function($persons) {
          return $persons->name_person . ' - ' . $persons->color->name_color;
     });
}

上面将返回如下数组

{
    "1": "omer aslam - red",
    "2": "irfan ashraf - blue",
    "3": "shaban khan - pink",
    "4": "rana touqeer - red",
    "5": "sajjad - blue"
}

编辑

如果要为没有外观的情况下的人保存多种颜色,因为您没有联结表,并且针对person的颜色保存在persons表中,但是无论如何,如果颜色是one-to-many则在one-to-many更改回调函数ArrayHelper::map()移至下面,以便向您显示与该人关联的所有颜色。

function($persons) {
    return $persons->name_person . '-' . implode(",",\yii\helpers\ArrayHelper::getColumn($persons->color, 'name_color'));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM