Laravel 4: Как использовать Accessor в выражении where

Можно ли использовать Accessor для сравнения в Laravel 4, например:

class User extends Eloquent {

// define Accessor
public function getSpecialNameAttribute()
{
return 'Joda';
}

}

$User = User::where('gender','=','male')->where('specialName','=','Joda');

?

1

Решение

Да, вы можете использовать его для фильтрации результатов запроса:

User
::where('gender','=','male')
->get()
->filter(function($item) {
return $item->specialName === 'Luke';
});

(!) Обратите внимание, что фильтрация будет применяться после запроса к БД, поэтому в случае больших данных это решение будет иметь проблемы с производительностью.

Для более подробной информации я гуглил для вас этот учебник Коллекции.

Также я предлагаю области запросов может быть полезным для выполнения вашей задачи наилучшим образом.

6

Другие решения

Нет, вы не можете использовать это таким образом.

Когда вы используете:

$user = User::where('gender','=','male')->where('specialName','=','Joda')->get();

ты попробуешь сравнить specialName столбец в базе данных с Joda строка.

Вы не можете использовать аксессор здесь, потому что аксессор может быть очень сложным, и тогда Laravel потребуется взять все данные из таблицы в базе данных (например, 100000 записей) и рассчитать аксессоры для всех них, чтобы получить для вас только те записи, которые вам нужны (например, 1). запись).

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

0