2017-09-13 108 views
0

我是很新,YII2,所以我真的不知道这是如何工作,但我想加入上factuur_id表,这样我可以显示我的发票的产品(factuur)Yii2〜SQL JOIN表2

通常你会做这样的事情:

$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

my relations

+0

如果你有文件之间的关系,你可以使用模型在模型中添加的关系之间的关系,你需要和使用getter,你可以retrive的您需要的相关视图http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#relational-data – scaisEdge

+0

文档非常好,所以只需从Scais链接中读取一些内容,您应该了解所有内容。 – Yupik

回答

0

使用数据库来显示产品(producten)由右发票是不容易的,在短短的几句话来解释功能。我建议你阅读关于它的指南: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. 
0

如果生成与数据库的关系模型,那么你可以做这样的事情:

[假设你有一个名为在你的模型Facturen.php producten关系]

/** 
* @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