Serggalas
@Serggalas
Учусь

Как добавить условие при связях?

Есть класс Price он привязан к классу Product, в моделе Product. Следующим образом
public function getPrice()
    {
        return $this->hasMany(Price::className(), ['product_id' => 'id']);

    }

в дальнейшем вызывается так $price = $model->price; Появилась нобходимость также делать выборку по одному условию в таблице price есть столбец countryid, там содержатся id стран есть таблица country с информацией о странах. Путем хитрых танцев с бубном я получаю id страны с которой заходит пользователь. Но вот как мне отобрать теперь по столбцу countryid ума не приложу подскажите пожалуйста.
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 2
Смотрите, вы можете пойти двумя путями. Сделать условие выборки единичным, там где вам это нужно.
function ($someCountry = 'Ukraine')
{
$product = Product::findOne(123);
//Запрос ниже выполняться может сколько угодно раз в отличии от $price = $product ->Price();
$price = $product ->getPrice()
    ->where(['country =:someCountry', [':someCountry' => $someCountry])
    ->orderBy('id')
    ->all();
}


Либо изначально сделать связь с определенным условием.
class Product extends ActiveRecord
{
    public function getBigPrices($someCountry)
    {
        return $this->hasMany(Price::className(), ['product_id' => 'id'])
            ->where('country > :someCountry', [':someCountry' => $someCountry])
            ->orderBy('id');
    }
}


Только в первом варианте, думаю есть более простой Where что то вроде
$query->where(['country' => USA]);
Ответ написан
Serggalas
@Serggalas Автор вопроса
Учусь
$model->getPrice()->andWhere(['countryid' => $country->id])->one() вот таким образом вышел из положения
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы