我有3个名为stock,product,users的表.我有一个加入查询,如下所示.任何人都可以告诉我如何在yii2中实现它?
SELECT
stock.sale_price_per_unit,
sum(stock.quantity),
product.product_name,
users.username
FROM
stock
LEFT JOIN product ON product.product_id=stock.product_id
LEFT JOIN users ON users.user_id=stock.seller_id
WHERE stock.product_id=3
GROUP BY stock.seller_id
Run Code Online (Sandbox Code Playgroud)
请参阅http://www.yiiframework.com/doc-2.0/guide-active-record.html#joining-with-relations和http://www.yiiframework.com/forum/index.php/topic/50423- joins-are-back /:
$orders = Order::find()->joinWith('customer')->orderBy('customer.id, order.id')->all();
Run Code Online (Sandbox Code Playgroud)
所以你的代码应该是这样的:
$query = Stock::find()
->joinWith(['product', 'users']);
$items = $query
->select([
'sale_price_per_unit',
'sum(quantity)',
'product.product_name',
'users.username'])
->where(['stock.product_id'=>3])
->groupBy('seller_id')
->all();
Run Code Online (Sandbox Code Playgroud)
在库存模型中声明关系"product"和"users":HAS_MANY:
public function getUsers()
{
return $this->hasMany(User::className(), ['seller_id' => 'user_id']);
}
Run Code Online (Sandbox Code Playgroud)
HAS_ONE
public function getProduct()
{
return $this->hasOne(Product::className(), ['product_id' => 'product_id']);
}
Run Code Online (Sandbox Code Playgroud)