Yii2 Ii2框架中的冒号是什么意思?
我是yii2的新手,我想知道查询中的冒号是什么意思 我对绑定参数进行了研究,但在yii2文档中说: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 =
// 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
因此,左侧(等于之前)表示列名,右侧部分表示将在后面安全绑定的值
但是您不必自己编写参数,Yii2QueryBuilder
会自动为您生成参数
还有其他不使用冒号编写查询的方法,而且使用频率更高。此查询可以这样编写:
$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