2017-09-13 54 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