我对YII2很新,所以我真的不知道它是如何工作的,但我想在factuur_id上加入表格,以便我可以在发票中显示产品(factuur)
通常你会做这样的事情:$connection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
if (mysqli_connect_errno()){
die("Database Connection Failed: " . mysqli_error() . "(". mysqli_connect_errno() . ")"
);
}
$sql = "SELECT * FROM facturen JOIN producten ON facturen.factuur_id = producten.factuur_id WHERE facturen.factuur_id = 13";
if ($result = mysqli_query($connection, $sql)){
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
echo $result;
但在yii2中你有类似查询构建器(?)的东西 那怎么办?
我想通过ID
显示正确发票的产品(producten)答案 0 :(得分:0)
使用数据库不是一个易于解释的功能。我建议你阅读有关它的指南:http://www.yiiframework.com/doc-2.0/guide-README.html#working-with-databases。但这里有一些快速信息。
简而言之,您应该尝试创建ActiveRecord对象。这可以通过启用" gii"您的配置中的模块,然后转到http://[your_host]/gii/model
以生成表的活动记录类。
然后你可以为你的要求做这样的事情。
class Companies extends \yii\db\ActiveRecord {} // auto-generated
class Facturen extends \yii\db\ActiveRecord {} // auto-generated
function tryJoin()
{
$cTableName = Companies::tableName();
$fTableName = Facturen::tableName();
$query = Companies->find();
$query->leftJoin($fTableName, "{$cTableName}.company_id = {$fTableName}.company_id");
$query->where([{$fTableName}.person_id => 123456]);
$companyList = $query->all();
// the result is a list of Company objects
}
或者,如果您不想创建ActiveRecord实体,可以通过DB命令快速进行。
$sql = "SELECT *
FROM companies
LEFT JOIN facturen ON companies.company_id = facturen.company_id
WHERE facturen.person_id = 123456;";
$command = Yii::$app->db->createCommand($sql, $params);
$arrayList = $command->queryAll();
// The result is a list of array mapping company table column names.
答案 1 :(得分:0)
如果您已生成具有db关系的模型,那么您可以执行以下操作:
[假设您的模型中有一个名为producten
的关系Facturen.php]
/**
* @return \yii\db\ActiveQuery
*/
public function getProducten()
{
return $this->hasOne(Producten::className(), ['factuur_id' => 'factuur_id']);
}
在您的控制器中
$data = Facturen::find()
->joinWith('producten')
->where([Facturen::tableName().'.factuur_id' => '13'])
->one();
然后您可以按以下方式访问对象:
$data->company_id; // from table facturen
$data->producten['product_name'];
// from table producten because related tables are returned as arrays