Yii2 Ii2框架中的冒号是什么意思?

Yii2 Ii2框架中的冒号是什么意思?,yii2,yii2-basic-app,yii2-model,Yii2,Yii2 Basic App,Yii2 Model,我是yii2的新手,我想知道查询中的冒号是什么意思 我对绑定参数进行了研究,但在yii2文档中说: // returns all inactive customers $sql = 'SELECT * FROM customer WHERE status=:status'; 哪一方来自数据库?左边还是右边 哪个是简单文本,哪个是DB中的列?我很困惑 不使用冒号进行查询的另一种方法是什么?它有效吗 为什么在下一个示例中它有'anyo=**:**valor'?还有一些人没有 $dbLibro =

我是yii2的新手,我想知道查询中的冒号是什么意思

我对绑定参数进行了研究,但在yii2文档中说:

// returns all inactive customers
$sql = 'SELECT * FROM customer WHERE status=:status';
哪一方来自数据库?左边还是右边

哪个是简单文本,哪个是DB中的列?我很困惑

不使用冒号进行查询的另一种方法是什么?它有效吗

为什么在下一个示例中它有
'anyo=**:**valor'
?还有一些人没有

$dbLibro = Libro::find()->where('tipo = "Nacimiento"')->andWhere('cerrado = 0')->andWhere('anyo = :valor',[':valor'=>date("Y")])->one();

我希望它的明确原因文档对我来说有点混乱。

冒号与Yii2没有直接关系,它与Yii2使用的冒号有关

每个冒号都是稍后用于绑定值的占位符。例如,检查

如果我们在
ActiveQuery
中编写此查询:

SELECT * FROM customer WHERE status = :status
我们可以得到这样的结果:

$query = Customer::find()->where('status = :status', [':status' => Customer::STATUS_ACTIVE]);
$query = Customer::find(['status' => Customer::STATUS_ACTIVE]);
$models = $query->all();
$model = Libro::find()
    ->where([
        'tipo' => 'Nacimiento',
        'cerrado' => 0,
        'anyo' => date('Y'),
    ])->one();
假设
STATUS\u ACTIVE
常量等于
1
,执行后转换为:

SELECT * FROM "customer" WHERE status = 1
因此,左侧(等于之前)表示列名,右侧部分表示将在后面安全绑定的值

但是您不必自己编写参数,Yii2
QueryBuilder
会自动为您生成参数

还有其他不使用冒号编写查询的方法,而且使用频率更高。此查询可以这样编写:

$query = Customer::find()->where('status = :status', [':status' => Customer::STATUS_ACTIVE]);
$query = Customer::find(['status' => Customer::STATUS_ACTIVE]);
$models = $query->all();
$model = Libro::find()
    ->where([
        'tipo' => 'Nacimiento',
        'cerrado' => 0,
        'anyo' => date('Y'),
    ])->one();
或者使用以下快捷方式:

$models = Customer::findAll(['status' => Customer::STATUS_ACTIVE]);
或者它甚至可以放在一个:

在这种情况下,Yii会自动生成参数,相当于:

SELECT * FROM "customer" WHERE "status"=:qp1
1
将绑定到
:qp1
参数,请注意,在这种情况下,列名也是双引号

如果尝试使用更多条件,参数将是
:qp2
:qp3
,依此类推(默认的
参数前缀是
:qp

对于第二个查询,可以这样重写:

$query = Customer::find()->where('status = :status', [':status' => Customer::STATUS_ACTIVE]);
$query = Customer::find(['status' => Customer::STATUS_ACTIVE]);
$models = $query->all();
$model = Libro::find()
    ->where([
        'tipo' => 'Nacimiento',
        'cerrado' => 0,
        'anyo' => date('Y'),
    ])->one();
这种查询在这种状态下看起来更好,可读性更好

Yii2允许在查询中生成更复杂的条件,检查文档以获取更多详细信息

p.S.最好在代码中使用英语命名。想想其他支持您的代码的国际开发人员<代码>日期('Y')
可以使用数据库函数计算,具体取决于使用的RDBMS