Так что я работаю с Yii2 и пытаюсь привести в порядок то, что я считаю базой данных отношений. Я пытаюсь сделать так, чтобы несколько таблиц возвращали один набор данных с оставшимся API Yii2.
Я пытался найти именно то, что мне нужно сделать, но я немного запутался. Я считаю, что мне нужно настроить внешние ключи и как-то связать их, но тут я теряюсь. Также я думаю, что после настройки части базы данных инструмент gii подхватывает «отношения», когда я строю новую модель? Я думаю, что мне придется собирать вручную новую модель / контроллер вместо использования gii, который отправляет все шаблоны в каталог ‘frontend’, а не в мой версионный каталог ‘module / 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 api: localhost/yii2/api/web/vi/states/
И получите ответ:
{
«успех»: правда,
«данные»: [
{
«id»: 1,
«country_id»: 10,
«state_name»: «Texas»},
{
«id»: 2,
«country_id»: 10,
«state_name»: «New York»},
{
«id»: 3,
«country_id»: 20,
«state_name»: «Глазго»}
]
}
}
модель (State.php):
<?php
namespace api\modules\v1\models;
use Yii;
/**
* This is the model class for table "state".
*
* @property integer $country_id
* @property string $state_name
*
* @property Country $country
*/
class State extends \yii\db\ActiveRecord
{
/**
* @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 \yii\db\ActiveQuery
*/
public function getCountry()
{
return $this->hasOne(Country::className(), ['country_id' => 'country_id']);
}
}
контроллер (StateController.php):
<?php
namespace api\modules\v1\controllers;
use yii\rest\ActiveController;
/**
* Country Controller API
*
*/
class StateController extends ActiveController
{
public $modelClass = 'api\modules\v1\models\State';
}
Настройте внешние ключи в базе данных и использовать gii для генерации моделей, и они будут автоматически связывать их в соответствии с вашими отношениями, а затем вы можете использовать его следующим образом …
$states= State::find()->with('countries')->all();
этот код даст вам штаты со своими странами
Я считаю, что я должен настроить внешние ключи и связать их как-то, но
вот где я заблудился. Также я думаю, что однажды часть базы данных
Устанавливает ли инструмент gii на «отношения», когда я строю
новая модель?
да
Я думаю, что придется вручную построить новую модель / контроллер вместо
используя gii, который отправляет все шаблоны в каталог ‘frontend’ и
не мой версионный каталог ‘module / v1’
Вы можете заставить Gii отправлять файлы куда угодно, вам просто нужно разместить пространство имен в нужном месте.