Задать вопрос

Не работает добавление документа в коллекцию MongoDB в Yii2 через Active Record?

У меня шаблон advanced. Подключал MongoDB в конфиге common/config в файле main-local.php (пароля и пользователя нет, имя базы mymongo, коллекция sale):

'components' => [
'mongodb' => [
'class' => '\yii\mongodb\Connection',
'dsn' => 'mongodb://localhost:27017/mymongo',
],
]

Выборка работает, с этим проблем нет. А вот добавить новый документ не получается. Использовал методы insert() и save() из Active Record. Браузер обновляю, ошибок никаких, в базе новых данных нет. Причём, если писать запросы на чистом PHP (без использования фреймворка), то данные прекрасно добавляются!

модель:

<?php
namespace frontend\models;

use yii\base\Model;
use yii\mongodb\ActiveRecord;
use yii\db\ActiveRecordInterface;

class Sale extends ActiveRecord implements ActiveRecordInterface
{
    /**
     * @return string the name of the index associated with this ActiveRecord class.
     */
    public static function collectionName()
    {
        return 'sale';
    }

    /**
     * @return array list of attribute names.
     */
    public function attributes()
    {
        return ['_id', 'ids', 'name', 'path', 'file'];
    }
}

?>


контроллер

<?php
namespace frontend\controllers;

use Yii;
use yii\base\InvalidParamException;
use yii\web\BadRequestHttpException;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use common\models\LoginForm;
use frontend\models\PasswordResetRequestForm;
use frontend\models\ResetPasswordForm;
use frontend\models\SignupForm;
use frontend\models\ContactForm;
use frontend\models\ColorForm;
use yii\data\Pagination;
use frontend\models\Sale;
use yii\mongodb\ActiveRecord;
use yii\db\ActiveRecordInterface;

/**
 * Site controller
 */
class SiteController extends Controller
{

public function actionSale()
    {

$query = Sale::find()->orderBy(['ids' => SORT_DESC])->where(['>=', 'ids', 3]);

$customer = new Sale();

$customer->ids = 18;
$customer->name = 'Donna';
$customer->save();

$pagination = new Pagination([
            'defaultPageSize' => 5,
            'totalCount' => $query->count(),
        ]);

        $sales = $query->offset($pagination->offset)->limit($pagination->limit)->all();

        return $this->render('sale', [
            'sales' => $sales,
            'pagination' => $pagination,
        ]);
    }

}

?>


вид views/site/sale.php

<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Countries</h1>
<ul>
<?php foreach ($sales as $sale): ?>
    <li>
        <?= Html::encode("{$sale->ids} ({$sale->name})") ?>:
        <?= $sale->path ?>
    </li>
<?php endforeach; ?>
</ul>


<?= LinkPager::widget(['pagination' => $pagination]) ?>


Делал всё по документации.
  • Вопрос задан
  • 420 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
scanderberg
@scanderberg Автор вопроса
Проблему решил сам. Почистил кэш и всё заработало.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы