Yii2 关系数据库混乱



所以我正在使用Yii2,我试图让我认为的关系数据库井井有条。我试图做的是让多个表使用 Yii2 rest API 返回一组数据。

我一直试图找到我需要做的确切内容,但我有点困惑。我相信我必须设置外键并以某种方式链接它们,但这就是我迷路的地方。另外,我认为一旦设置了数据库部分,gii工具在构建新模型时是否会选择"关系"?我认为我必须手动构建新的模型/控制器而不是使用 gii,这会将所有模板发送到"前端"目录,而不是我的版本控制的"模块/v1"目录


----已编辑以进行更改----

表"状态":

- country_id is the index
+--------------------------------------+---------------------------------+
| Column     | Internal Relations      | Foreign Key constraint (INNODB) |
+--------------------------------------+---------------------------------+
| country_id | yii2.country.country_id | yii2.ountry.country_id          |
+------------------------------------------------------------------------+
+-------------+------------------+----------------------+
| id (int, AI)| country_id (int) | state_name (varchar) |
+-------------+------------------+----------------------+
| 0           | 10               | Texas                |
| 1           | 10               | New York             |
| 2           | 20               | Glasgow              |
+-------------+------------------+----------------------+

表"国家":

- country_id is the Primary Key
- column to display in relation-view is country_name
+------------------+--------------------------+
| country_id (int) | country_name (varchar)   |
+------------------+--------------------------+
| 10               | United States of America |
| 20               | Germany                  |
+------------------+--------------------------+

所以我的目标是让我的 api GET 请求:localhost/yii2/api/web/vi/states/

  • 并获得以下响应:

    {"成功":真,"数据":[{"id": 1,"country_id": 10,"state_name": "德克萨斯州"},{"id": 2,"country_id": 10,"state_name": "纽约"},{"id": 3,"country_id": 20,"state_name": "格拉斯哥"}]}}

模型(州.php):

<?php
namespace apimodulesv1models;
use Yii;
/**
 * This is the model class for table "state".
 *
 * @property integer $country_id
 * @property string $state_name
 *
 * @property Country $country
 */
class State extends yiidbActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'state';
    }
    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['country_id', 'state_name'], 'required'],
            [['country_id'], 'integer'],
            [['state_name'], 'string', 'max' => 55]
        ];
    }
    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'country_id' => 'Country ID',
            'state_name' => 'State Name',
        ];
    }
    /**
     * @return yiidbActiveQuery
     */
    public function getCountry()
    {
        return $this->hasOne(Country::className(), ['country_id' => 'country_id']);
    }
}
控制器

(状态控制器.php):

<?php
namespace apimodulesv1controllers;
use yiirestActiveController;
/**
 * Country Controller API
 *
 */
class StateController extends ActiveController
{
    public $modelClass = 'apimodulesv1modelsState';   
}

在数据库中设置外键并使用 gii 生成模型,它会根据您的关系自动链接它们,然后您可以像这样使用它......

$states= State::find()->with('countries')->all();

此代码将为您提供各州及其国家/地区

我相信我必须设置外键并以某种方式链接它们,但是 这就是我迷路的地方。我也认为一旦数据库部分是 设置,GII工具在我构建时是否会选择"关系" 新模式?

是的

我认为我必须手动构建新模型/控制器而不是 使用 GII,将所有模板发送到"前端"目录,然后 不是我的版本控制"模块/v1"目录

你可以让Gii将文件发送到任何你想要的地方,你只需要把命名空间放在正确的位置。

相关内容

  • 没有找到相关文章

最新更新