yii2-advanced, суть: получаю $id, нахожу в таблице product_image 'id' => $id, и также надо найти запись из таблицы product, у которой должно быть 'id' => 'product_image->id'. Найти нужно одну запись картинки и одну запись продукта.
Как это оформить?
Сделал так:
$model = Images::find()
->joinWith('products')
->where(['id' => $id])
->andWhere(['id' => 'product_id'])
->one();
но похоже что что-то не так оформил. Думаю можно сделать 2 запроса, но тогда какой смысл от joinWith? Можно обойтись без второго запроса и как это оформить?
2 запроса выглядят так:
$model = Images::find()->where(['id' => $id])->one();
$prod = Products::find()->where(['id' => $model->product_id])->one();
Связи products и images:
public function getProducts()
{
return $this->hasOne(Products::className(), ['id' => 'product_id']);
}
public function getImages()
{
return $this->hasMany(Images::className(), ['product_id' => 'id']);
}
Сам метод, для которого нужен запрос:
$model = Images::find()
->joinWith('product')
->where(['id' => $id])
->one();
if (Yii::$app->user->can('updateFabricatorImages', ['brand_id' => $model->product->brand_id])) {
Images::isArray($model);
if ($model->delete()) {
return $this->redirect(["products/view/?id=$model->product_id"]);
}
}
else {
throw new ForbiddenHttpException('Вам не разрешено производить данное действие.');
}
$model = Images::find()
->joinWith('product')
->where(['product.id' => $id])
->asArray()
->one();
Раз у Вас hasOne тогда связь лучше назвать getProduct
public function getProduct()
{
return $this->hasOne(Products::className(), ['id' => 'product_id']);
}
$model = Images::find()
->joinWith(['product' => function ($q) {
$q->from('product');
}])
->where(['id' => $id])
->one();
Сборка персонального компьютера от Artline: умный выбор для современных пользователей