class BuscarXCodBarras extends Component
{
public string $codigoBarras = '';
public function buscar()
{
$articulos = Articulo::with('precios')->whereHas('precios', function($q) use ($this->codigoBarras){
$q->where()
})
Como paso un parámetro a una funcion de whereHas sin tener que hacer:
$codbar = $this->codigoBarras;
$articulos = Articulo::with('precios')->whereHas('precios', function($q) use ($codbar){
¿Alguna ayuda?
Gracias.
Alberto.
Hola Alberto,
Dentro de la función anónima que le pasás al whereHas tenés acceso a la variable $this. El ejemplo que subiste podrías reescribirlo de este modo también:
$articulos = Articulo::with("precios")->whereHas("precios", function($query) {
$query->where("codigo", $this->codigoBarras);
};
Si en tu aplicación repetís mucho estos bloques de código entonces otra opción podría ser crear scopes genéricas. Por ejemplo podrías definir un modelo base de la siguiente manera:
use Illuminate\Database\Eloquent\Builder;
class BaseModel
{
function scopeCustomWhereHas(Builder $query, $attr, $value) {
$query->where($attr, $value);
}
}
Y luego usarlo de este modo:
class Articulo extends BaseModel
{
//
}
Articulo::query()->customWhereHas("codigo", $this->codigoBarras);
Espero que te sirva. Saludos,
Gracias.
Si que funciona. No es lógico y no se me ocurrio probar. Supongo que 'use' sólo tiene sentido con las variables locales del método contenedor.