Laravel 5.4 Использование вычисляемого поля для сортировки, запросов и отображения - PullRequest
0 голосов
/ 02 июня 2018

Я начинающий программист на Laravel и только что столкнулся с этой проблемой: у меня есть таблица people с полями firstName, middleName и lastName, которую я объединяю в функцию под названием getAliasByLastNameAttribute() вмодель People.('alias_by_last_name' = lastName, firstName middleName...).Затем я добавил это новое поле к модели People, используя:

protected $appends = [
    'alias_by_last_name'
];

Пока все хорошо, и я получаю именно то, что хочу.Теперь мне нужно использовать это вычисленное значение поля во всем приложении, чтобы пользователь мог видеть его в элементах списка в формах других связанных моделей, выбирать его в элементах выбора своей и других связанных моделей и фильтровать запросы к нему.Значение в разных местах.Как я могу сделать это без необходимости сохранения значения в базе данных?

Заранее спасибо.

1 Ответ

0 голосов
/ 03 июня 2018

Если вы хотите использовать объединенные поля в сортировке, вам нужно объединить их в запросе, например:

->orderBy(DB::raw('concat(firstName, " ", middleName, " ", lastName)'))

Чтобы не СУХОЙ, вы можете определить его в своей модели:

class People extends Model {

    public static function aliasName() {
        return DB::raw('concat(firstName, " ", middleName, " ", lastName)');
    }
}

А затем используйте его как:

$people = People::orderBy(People::aliasName())->get();

Конечно, вы всегда можете получить доступ к alias_by_last_name, который вы определили в аксессоре getAliasByLastNameAttribute().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...