所以我正在使用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将文件发送到任何你想要的地方,你只需要把命名空间放在正确的位置。