Yii2 中如何使用查询

How the query used in Yii2

你能帮帮我吗。我想点赞example but on my source code it becomes empty 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',则结果为 result

使用 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,
        ]);
    }

结果是 error .

在将列与用户提供的或可由用户编辑的任何此类输入进行比较时,绑定参数总是好的,因为在您的情况下,您作为参数传递给的 $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 提供了一个面向对象的接口,用于访问和操作存储在数据库中的数据。阅读 Here 让您的生活更轻松。