Как пролить полное имя на имя, отчество и фамилию в Query Builder? - PullRequest
0 голосов
/ 24 марта 2019

У меня есть таблица, и есть поле «имя», но иногда есть имена, которые являются слишком длинными, как мне просто взять имя, отчество и фамилию (всего 3 слова)?

$student = DB::table('student')
    ->select('student.name')//Split to Firstname, Middlename&Lastname
    ->get();

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Самый простой способ, я думаю.Надежда поможет вам

Для меня это плохая идея разбить одно слово (полное имя) на три, потому что, если, если есть два слова в его имени, то проблема будет существовать, так как вы хотите только трислова (имя, отчество и фамилия).

Но если вы действительно хотите продолжить, вот код для этого:

$student = DB::table('student')
    ->select(
        'student.name',
        DB::raw("SUBSTRING_INDEX(student.name, ' ', 1) AS Firstname"),
        DB::raw("SUBSTRING_INDEX(SUBSTRING_INDEX(student.name, ' ', 2),' ',-1) AS Middlename"),
        DB::raw("SUBSTRING_INDEX(SUBSTRING_INDEX(student.name, ' ', 3),' ',-1) AS Lastname")
    )
    ->get();

Я предполагаю, что вы используете, или это пробел ('')который объединяет три слова (имя, отчество и фамилия)

Примечание: примеры выходных данных:
1. Джон Ghost Pon
Имя = "Джон", Middlename =" Призрак ", Фамилия =" Пон "
2. Жениться на Энн Смит Ингрэм
Имя =" Жениться ", Middlename = "Anne", Фамилия = "Smith"


SUBSTRING_INDEX Функция возвращает подстроку строки передуказанное количество разделителей встречается: Больше примеров
Пожалуйста, дайте мне знать, если все еще не работает.
0 голосов
/ 24 марта 2019

Я не думаю, что Eloquent может сделать это. Вам нужно использовать встроенные функции php

$fullname = explode(" ", $student);
$firstname = array_shift($split);
$lastname  = implode(" ", $split);
...