我有一个包含多列的表,我想使用另一个列名作为搜索条件返回列名。我如何在yii2中实现这一目标?
下面是示例代码,正常的sql应该是:
$name = SELECT type_name FROM ProductTable WHERE type_id = 1;
echo $name;
这应该返回列type_name的值,其中列type_id的值等于1.我试过了,但它没有工作
$type_name = ProductTable::find()->where(['type_id' =>$model->type_id]);
$type_name = Product::find(['type_name'])->where(['type_id' =>$model->type_id]);
我也试过这个,但我猜错了
我希望我的问题很清楚,任何帮助都会让他赞赏
答案 0 :(得分:1)
有关Yii2的ActiveRecord的一般介绍,请参阅指南:http://www.yiiframework.com/doc-2.0/guide-db-active-record.html
如果您想要完整的行并拥有模型,那么您只是错过one()
:
Product::find()->where(['type_id' =>$model->type_id])->one();
如果您确实定义了模型并且只想要一个值,请尝试:
Product::find()->select('type_name')->where(['type_id' =>$model->type_id])->scalar();
它基本上通过模型生成ActiveQuery,并将其更改为仅返回匹配结果的第一行中的第一列。
如果您没有模型,您还可以生成没有ActiveRecord使用的普通查询(http://www.yiiframework.com/doc-2.0/yii-db-query.html)
$name = (new Query())->select('type_name')
->from('ProductTable')
->where(['type_id' =>$model->type_id])
->scalar();
答案 1 :(得分:1)
我假设您使用Gii模块生成了ProductTable。
另外,如果type_id列是主键:
$product = ProductTable::findOne($model->type_id);
if($product !== null) { $product->typeName /*... read value ...*/}
或获取所有记录
$products = ProductTable::findAll($model->type_id); //match all records.
对于任何其他列,请改用以下语法:
$product = ProductTable::findOne(['type_id' => $model->type_id]);
答案 2 :(得分:1)
你也可以使用createCommand!
$name = \Yii::$app->getDb()->createCommand("SELECT type_name FROM ProductTable WHERE type_id=:typeId", ['typeId'=>$model->type_id])->queryAll();
答案 3 :(得分:0)
使用以下代码获取type_name
$PTable=ProductTable::find()->select('type_name')->where(['type_id' =>$model->type_id])->one();
echo $PTable->type_name;