У меня есть два следующих объявления контроллера в Yii 2. Бывший получает идентификатор автоматически после сохранения, тогда как последний не делает.Yii 2, класс Active Record не получает идентификатор после сохранения
Это один получает $ Тест-> идентификатор автоматически после $ test-> Сохранить()
namespace app\controllers;
use yii;
use yii\web\Controller;
use app\models\test\Test;
class TestController extends Controller
{
public function actionAdd()
{
$model = new Test;
if ($model->load(Yii::$app->request->post()) && $model->save())
{
var_dump($model);
return 'success';
} else {
return $this->render('add', [
'model' => $model,
]);
}
}
}
Где это один не
namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\customer\Customer;
use app\models\customer\Phone;
use app\models\customer\CustomerRecord;
use app\models\customer\PhoneRecord;
class CustomersController extends Controller
{
private function store (Customer $customer)
{
$customerRecord = new CustomerRecord();
$customerRecord->name = $customer->name;
$customerRecord->birthDate = $customer->birthDate->format('dd-mm-yyyy');
$customerRecord->notes = $customer->notes;
echo 'customer before save';
var_dump($customerRecord);
$customerRecord->save();
echo 'customer after save';
var_dump($customerRecord);
foreach ($customer->phones as $phone)
{
$phoneRecord = new PhoneRecord();
$phoneRecord->number = $phone->number;
$phoneRecord->customer_id = $customerRecord->id;
$phoneRecord->save();
}
}
private function makeCustomer(CustomerRecord $customerRecord,
PhoneRecord $phoneRecord)
{
$name = $customerRecord->name;
$birthDate = new \DateTime($customerRecord->birthDate);
$customer = new Customer ($name, $birthDate);
$customer->notes = $customerRecord->notes;
$customer->phones[] = new Phone($phoneRecord->number);
return $customer;
}
public function actionAdd()
{
$customer = new CustomerRecord;
$phone = new PhoneRecord;
if ($this->load($customer, $phone, Yii::$app->request->post()) && $customer->save())
{
$this->store($this->makeCustomer($customer, $phone));
}
return $this->render('add', ['customer' => $customer, 'phone' => $phone]);
}
private function load (CustomerRecord $customerRecord, Phonerecord $phoneRecord,
array $post)
{
return $customerRecord->load(Yii::$app->request->post())
and $phoneRecord->load(Yii::$app->request->post())
and $customerRecord->validate()
and $phoneRecord->validate(['number']);
}
}
последних кода из книги с именем «Web Разработка приложений с Yii 2 и PHP », и он использует переходный уровень между MVC и активной записью (если я правильно понимаю).
$ customerRecord-> update() и $ customerRecord-> getPrimaryKey() также не помогает.
Любые идеи?
P.S. данные записываются на запись в db без проблем.
Имеет ли таблица первичный ключ? Включен ли auto_increment для первичного ключа? – Dador
Да и да. И они работают так, как ожидалось. – SercioSoydanov