Как сделать trim ключевого поля при объявление связи Active Record

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Alex_N
Сообщения: 68
Зарегистрирован: 2015.03.02, 21:20

Как сделать trim ключевого поля при объявление связи Active Record

Сообщение Alex_N »

Всем привет! Подскажите пожалуйста, как правильно объявиться связь Active Record, если к одному из ключевых полей необходимо применить функцию trim(убрать лишние пробелы) ?

К примеру, customer_id и id являются строками, и в значениях customer_id присутствуют пробелы в конце строки. Как их убрать при объявлении связи?

Код: Выделить всё

class Customer extends ActiveRecord
{
    public function getOrders()
    {
        return $this->hasMany(Order::className(), ['customer_id' => 'id']);
    }
}
Спасибо.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Как сделать trim ключевого поля при объявление связи Active Record

Сообщение yiiliveext »

Проще сделать так, чтобы этих пробелов там не было.
Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

Re: Как сделать trim ключевого поля при объявление связи Active Record

Сообщение Chelobaka »

Если в вашей таблице customer_id может быть такими: ' 1', '1 ', '1' то как вариант можно использовать так:

Код: Выделить всё

public function getOrders()
    {
        return Order::find()->where(['like', 'customer_id' => trim($this->id)]) // тут вернется ActiveQuery
    }
Но это очень плохой вариант, так как у вас будут возращаться и 11, 111, 1111.

Если параметр с пробелами $this->id то оборачивайте в trim. Если же customer_id то trim не поможет.
Что бы избавиться от пробелов в дальнейшем можно использовать встроенные фильтры.

Вставить в модель Order

Код: Выделить всё

public function rules() {
....
   // обрезает пробелы вокруг "customer_id"
    [['customer_id'], 'trim'],
Ответить