YII2 Associations examples or via() or viaTable() example

417 views Asked by At

enter image description here

HI All,

This example will help you how to get products details of customer using restful API call,

1

There are 1 answers

0
kranthi kumar pulivarhty On

your API call should like this : http://127.0.0.1:8080/api/web/customer?expand=orders,orderItems,products

class Customer extends \yii\db\ActiveRecord
{
/**
 * @inheritdoc
 */
public static function tableName()
{
    return 'customer';
}

/**
 * @inheritdoc
 */
public function rules()
{
    return [
        [['ID', 'Name'], 'required'],
        [['ID'], 'integer'],
        [['Name'], 'string'],
        [['PhoneNo'], 'string', 'max' => 45]
    ];
}

/**
 * @inheritdoc
 */
public function attributeLabels()
{
    return [
        'ID' => 'ID',
        'Name' => 'Name',
        'PhoneNo' => 'Phone No',
    ];
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getOrders()
{
    return $this->hasMany(Order::className(), ['customer_id' => 'ID']);
}

public function getOrderItems()
{
    return $this->hasMany(Orderitem::className(),['Order_id' => 'ID'  ])

            ->via('orders');
        ;
}

public function getProducts()
{
   return  $this->hasMany( Product::className() , ['ID' => 'Product_ID' ] )
           ->via('orderItems') ; 

}

/**
 * @inheritdoc
 * @return CustomerQuery the active query used by this AR class.
 */
public static function find()
{
    return new CustomerQuery(get_called_class());
}

/**
 * @info: call : http://127.0.0.1:8080/api/web/customer?expand=orders for get customer and his orders also;
 * @return type
 */
public function extraFields() 
{
        return ['orders','orderItems','products']; 
}

}

enter image description here