Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

263
Vistas
Laravel: Donde la selección para la relación Eloquent Eager Loading

Tengo dos tablas DB:

Publicaciones

 $table->increments('id'); $table->integer('country_id')->unsigned(); $table->foreign('country_id')->references('id')->on('countries');

Países

 $table->increments('id'); $table->string('name', 70);

Uso laravel como back-end. Ahora quiero implementar el filtrado de datos para mi front-end. Entonces, el usuario puede seleccionar el nombre de un país y laravel debe responder la solicitud solo con publicaciones que tengan un país con el nombre especificado.

¿Cómo podría agregar esta condición a mi consulta de paginación existente? Intenté esto:

 $query = app(Post::class)->with('country')->newQuery(); // ... if ($request->exists('country')) { $query->where('country.name', $request->country); } // ...

... resultando en el siguiente error:

 Column not found: 1054 Unknown column 'country.name' in 'where clause' (SQL: select count(*) as aggregate from `posts` where `country`.`name` = Albania)
about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El método whereHas acepta el parámetro según la base de código de Laravel,

 /** * Add a relationship count / exists condition to the query with where clauses. * * @param string $relation * @param \Closure|null $callback * @param string $operator * @param int $count * @return \Illuminate\Database\Eloquent\Builder|static */ public function whereHas($relation, Closure $callback = null, $operator = '>=', $count = 1) { return $this->has($relation, $operator, $count, 'and', $callback); }

así que cambiando el código un poco como,

 $query = "" if ($request->has('country'){ $query = Post::with("country")->whereHas("country",function($q) use($request){ $q->where("name","=",$request->country); })->get() }else{ $query = Post::with("country")->get(); }

Por cierto, el código anterior se puede simplificar un poco de la siguiente manera;

 $query = "" if ($request->has('country'){ $query = Post::with(["country" => function($q) use($request){ $q->where("name","=",$request->country); }])->first() }else{ $query = Post::with("country")->get();

}

about 4 years ago · Santiago Trujillo Denunciar

0

$query = "" if ($request->has('country'){ $query = Post::with("country")->whereHas("country", function($q) use($request){ $q->where("name","=",$request->country); })->get() }else{ $query = Post::with("country")->get(); }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda