Как я могу использовать Laravel Eloquent для запроса объекта на основе атрибута / условия доступа? - PullRequest
0 голосов
/ 05 сентября 2018

Работа с примерами из документации, если у меня есть такой атрибут доступа:

public function getFullNameAttribute()
{
    return "{$this->first_name} {$this->last_name}"; // both are real columns
}

Как запустить where на основе вычисленного значения? Что-то вроде:

$user = User::where('full_name', 'John Doe');

Он должен соответствовать элементам, где first_name равно John и last_name равно Doe.

Есть ли способ сделать это или я делаю это неправильно?

Обновление: Я нашел аналогичный вопрос, заданный для Laravel 4, и на него есть ответ, однако в нем говорится, что фильтрация применяется после выполнения запроса, что будет очень неэффективно. Было ли какое-либо обновление этого механизма после Laravel 5?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Ответ Рафаля Мигды, пожалуй, самый правильный, но я нашел более элегантный - или я должен сказать, Eloquent - способ делать то, что я хотел, используя прицелы. В моей модели я положил:

public function scopeFullName($query, $fullName)
{
    return $query->whereRaw('CONCAT(first_name, " ", last_name) = "' . $fullName . '"');
}

Это позволит мне использовать область запроса следующим образом:

$user = User::fullName('John Doe');
0 голосов
/ 05 сентября 2018

Вы можете использовать оператор raw где с функцией CONCAT mysql:

->whereRaw('CONCAT(first_name," ",last_name) = "John Doe"')

Или только с 2-мя родами:

->where('first_name','John')->where('last_name','Doe')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...