#laravel #eloquent
Вопрос:
У меня есть таблица portal_user и таблица portal_roles. У меня есть сводная таблица pivot_user_roles, которая соединяет пользователей с их ролями.
class Role extends Model
{
use HasFactory;
protected $table = 'portal_roles';
protected $hidden = array('created_at', 'updated_at','deleted_at');
public function users()
{
return $this->belongsToMany(User::class, 'portal_user_roles');
}
}
class UserRole extends Model
{
use HasFactory;
protected $table = 'portal_user_roles';
protected $fillable = ['user_id','role_id'];
}
Я использую следующий код для поиска пользователей, которые принадлежат к определенной роли
$resultset = '';
$searchquery = $data['query'];
$rolesobj = Role::find($type_id);
if (self::checksearchtype($searchquery) == NAME_ONEPART) {
$resultset = $rolesobj->users->where('firstname', 'like', '%' . $searchquery . '%');
Вышеупомянутое
где
заявление не дает никаких результатов. Я ожидаю, что приведенное выше утверждение будет выполнять поиск в таблице пользователей, чтобы найти пользователя в зависимости от выбранной роли и переданного имени (или части имени).
Ответ №1:
$rolesobj->users()->where(...)->get()
Для этого вам нужно позвонить в службу связи пользователей. Потому что мутаторы напрямую извлекают элементы из базы данных, когда вы пытаетесь получить к ней доступ как к свойству.
кстати, также вы можете добавить некоторые условия в свой случай.
$rolesobj->users->where(...
Но в этом случае у вас есть объект коллекции, и вы не можете запросить его, как вы пытались