Как запрос используется в Yii2 - PullRequest
0 голосов
/ 05 марта 2019

Можете ли вы помочь мне.Мне нравится пример , но в моем исходном коде он становится пустым emty .Что такое запрос или исходный код в моем проекте?спасибо.

в контроллере

public function actionView($id)
{
    $con = Yii::$app->db;
    $sql = $con->createCommand("SELECT * FROM track where collecting_id=$id ORDER BY collecting_id desc");
    $posts = $sql->query();
    return $this->render('view', [
        'model' => $this->findModel($id),
        'posts' => $posts,
    ]);
}

в представлении

<div class="timeline__items">
<?php
foreach($posts as $row)
{
?>
<div class="timeline__item">
   <div class="timeline__content">
   <h2><?php echo $row['status']; ?></h2>
   <p><?php echo $row['tanggal']; ?></p>
</div>
</div>
<?php
}
?>
</div>

, если $ id в запросе заменен на 'PMUEI', результат будет результат

Использование ActiveDataProvider

public function actionView($id)
    {
        $model = $this->findModel($id);
        $hotel = Track::find()->where(['collecting_id' => $model->collecting_id]);
        $posts = new ActiveDataProvider([
            'query' => $hotel,
        ]);
        // $con = Yii::$app->db;
        // $sql = $con->createCommand(
        // "SELECT * FROM track where collecting_id=:collecting_id ORDER BY collecting_id desc",
        // [':collecting_id' => '$id']
        // );
        // $posts = $sql->queryAll();
        return $this->render(
        'view', [
            'model' => $this->findModel($id),
            'posts' => $posts,
        ]);
    }

результат ошибка .

1 Ответ

2 голосов
/ 05 марта 2019

Всегда полезно связывать параметры при сравнении столбцов с любым таким вводом, который предоставляется пользователем или может быть отредактирован пользователем, поскольку в вашем случае это $id, который вы передаете в качестве параметра actionView() , И тогда вам нужно использовать queryAll() или queryOne() на тот случай, если вы хотите вернуть несколько или одну строку.

Таким образом, вы должны изменить свой запрос на следующий

public function actionView($id)
{
    $con = Yii::$app->db;
    $sql = $con->createCommand(
        "SELECT * FROM track where collecting_id=:collecting_id ORDER BY collecting_id desc",
        [':collecting_id' => $id]
    );
    $posts = $sql->queryAll();
    return $this->render(
        'view', [
            'model' => $this->findModel($id),
            'posts' => $posts,
        ]
    );
}

Помимо вышесказанного, вы должны использовать ActiveRecord. Active Record предоставляет объектно-ориентированный интерфейс для доступа и управления данными, хранящимися в базах данных. Прочитайте Здесь , чтобы сделать вашу жизнь проще.

...