использование » где » в сводной таблице

#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(...
 

Но в этом случае у вас есть объект коллекции, и вы не можете запросить его, как вы пытались