pasar parametros a funcion Eloquent

Publicado por Alagoro
hace 3 meses
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.

Laravel
Respuesta de Cristian Olaz
hace 3 meses

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,

Respuesta de Alagoro
hace 3 meses

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.