Laravel получает данные SoftDelete от Eloquent

У меня есть этот красноречивый запрос:

$datos = Medidore::select([
    'medidores.*',
    'empresas.name as empresa',
    'tipo_medidor.descripcion as tipomedidor',
    'tipo1.descripcion as canal_1',
    'tipo2.descripcion as canal_2'])
    ->join('empresas', 'medidores.empresa_id', '=', 'empresas.id')
    ->join('tipo_medidor', 'medidores.cod_tipo_medidor', '=', 'tipo_medidor.id')
    ->join('tipo_canal_med as tipo1', 'medidores.canal1', '=', 'tipo1.id')
    ->join('tipo_canal_med as tipo2', 'medidores.canal2', '=', 'tipo2.id')
    ->whereNull('medidores.deleted_at')
    ->get();

Это не приносит никаких данных, почему? Если я сделаю это, $datos = Medidore::all(); конечно, это работает, с thrash data tho, потому что мне нужны соединения.

Как мне выполнить этот запрос с помощью Eloquent, joins и SoftDeletes?

1 ответ

Вам необходимо установить ваши отношения: https://laravel.com/docs/5.6/eloquent-relationships

В вашем классе Medidore это было бы

public function empresa(){
  return $this->belongsTo(Empresa::class);
}

В конечном итоге ваш запрос будет выглядеть примерно так, если я правильно понимаю ваши отношения:

Medidore::with('empresa', 'tipoMedidor', 'canal1', 'canal2')->get();

Eloquent автоматически учитывает мягкое удаление. Возвращенная коллекция Medidore объекты уже будут загружены $medidore->empresa из базы данных

Другие вопросы по тегам