Страница 1 из 1

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

Добавлено: 2019.09.18, 23:16
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']);
    }
}
Спасибо.

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

Добавлено: 2019.09.19, 10:39
yiiliveext
Проще сделать так, чтобы этих пробелов там не было.

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

Добавлено: 2019.09.19, 14:48
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'],