Ответ 1
1) Вы можете просто переопределить метод find()
в своей модели:
/**
* @return \yii\db\ActiveQuery
*/
public static function find()
{
return parent::find()->where(['<>', 'id', 1]);
}
Использование:
$products = Products::find()->all();
2) Используйте scope.
Создайте собственный класс запросов:
namespace app\models;
use yii\db\ActiveQuery;
class ProductQuery extends ActiveQuery
{
public function withoutFirst()
{
$this->andWhere(['<>', 'id', 1]);
return $this;
}
}
Переопределить метод find()
в вашей модели:
namespace app\models;
use yii\db\ActiveRecord;
class Product extends ActiveRecord
{
/**
* @inheritdoc
* @return ProductQuery
*/
public static function find()
{
return new ProductQuery(get_called_class());
}
}
Затем вы можете использовать его следующим образом:
$products = Products::find()->withoutFirst()->all();
Я думаю, что использование второго метода более гибко, потому что он делает код более понятным.
Дополнительные примечания:
-
Hardcoded
id
не является хорошей практикой. Лучше замените его эквивалентным условием. -
В этом примере я использовал другой способ задания условия. См. Различные способы задания условия в инструкции
where
в официальной документации .