es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo buscar datos de relación en Laravel.

public function scopeSearch($query, $value)
{
    $searchValues = explode(' ', $value);
    if (!$value) return $query;
    return $query->where(function ($q) use ($searchValues) {
        foreach ($searchValues as $token) {
            $q->orWhere('name', 'like', "%{$token}%");
            $q->orWhere('street', 'like', "%{$token}%");
        }
    });
}

Quiero buscar los datos. Este modelo también tiene:

public function brands()
{
    return $this->belongsToMany(Brand::class, 'dealer_brands');
}
public function province()
{
    return $this->belongsTo(Province::class);
}

¿Cómo puedo obtener datos de la relación? Por ejemplo, si el modelo Dealer tiene datos: nombre = josh, id de marca = 1 (brand.name = samsung), id de provincia = 2 (province.name = “aligora”). Cuando busco “Josh Samsung Alogora”, quiero obtener los datos. Cuando solo busco “aligora”, quiero obtener los datos del modelo que tiene la provincia “aligora”. ¿Cómo puedo modificar el código?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para modificar el código y buscar datos relacionados, puedes añadir cláusulas adicionales a la consulta dentro de la función where. Por ejemplo, para buscar concesionarios con una determinada marca y provincia, puedes modificar el código de la siguiente manera:

    public function scopeSearch($query, $value)
    {
        $searchValues = explode(' ', $value);
        if (!$value) return $query;
        return $query->where(function ($q) use ($searchValues) {
            foreach ($searchValues as $token) {
                $q->orWhere('name', 'like', "%{$token}%");
                $q->orWhereHas('brands', function($q) use ($token) {
                    $q->where('name', 'like', "%{$token}%");
                });
                $q->orWhereHas('province', function($q) use ($token) {
                    $q->where('name', 'like', "%{$token}%");
                });
            }
        });
    }
    

    Aquí, estamos usando el método orWhereHas para añadir una cláusula que busca datos relacionados. El primer argumento es el nombre del método de relación en el modelo (en este caso, brands y province), y el segundo argumento es una función que define las cláusulas adicionales de la consulta.

    Con este código modificado, puedes buscar concesionarios que tengan una determinada marca o provincia, así como buscar concesionarios por nombre. Por ejemplo, si buscas “Josh Samsung Aligora”, obtendrás el concesionario con el nombre “Josh” que tiene la marca “Samsung” y la provincia “Aligora”. Si buscas “Aligora”, obtendrás todos los concesionarios que tengan la provincia “Aligora”.

Comments are closed.