В БД есть таблица
galleries (ownerId (PK), object_id(FK))
Вот модель:
<?php
namespace app\models;
use Yii;
use yii\base\Model;
use yii\db\ActiveRecord;
class Product extends ActiveRecord
{
public $ownerId;
public $object_id;
private $connection;
public function __construct()
{
$this->connection = Yii::$app->db;
}
public static function tableName(){
return 'galleries';
}
public static function primaryKey()
{
return 'ownerId';
}
}
Вот так я в контроллере вношу данные (в данном примере для теста - они константные):
public function actionProduct()
{
$model = new Product();
$model->object_id = 1;
$model->save();
return $this->render('product', ['model' => $model]);
}
Таким образом,
я ожидаю, что выполнится примерно такой запрос:
INSERT INTO `galleries` (`object_id`) VALUES (1);
То есть, ownerId не указываем из-за того, что автоинкремент, а задаем значение для object_id. При этом, в таблице, на которую ссылается этот ключ значение 1 уже существует на момент выполнения запроса.
Что я получаю:SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`my_db.`galleries`, CONSTRAINT `galleries_ibfk_1` FOREIGN KEY (`object_id`) REFERENCES `objects` (`object_id`) ON DELETE CASCADE ON UPDATE CASCADE)
The SQL being executed was: <b>INSERT INTO `galleries` (`ownerId`) VALUES (DEFAULT)</b>
Вопросы:
1) Почему пытается выполниться именно такой запрос?
2) Как все-таки внести эти данные? Неужели, для этого нужно делать ещё одну модель для таблицы, на которую ссылаемся и прописывать в коде текущей модели для них связи?
Спасибо!