Mi consulta para buscar un nombre de usuario en una lista de tiendas es la siguiente:
$data = Store::join('users AS b', 'b.id', '=', 'stores.user_id') ->where('b.name', 'like', '%hazard%') ->paginate();Funciona. Pero uso join para hacerlo.
¿Cómo puedo hacerlo usando pertenecen a?
El modelo de mi tienda es así:
class Store extends Model { protected $fillable = ['name', 'user_id', ...]; public function user() { return $this->belongsTo(User::class,'user_id', 'id'); } ... }Utilice whereHas() :
Store::whereHas('user', function($q) use($username) { $q->where('name', 'like', '%'.$username.'%'); })->paginate(5);Puede hacerlo utilizando el paquete de búsqueda para buscar a través de los campos del modelo y sus campos de relaciones.
use Nicolaslopezj\Searchable\SearchableTrait; class User extends \Eloquent { use SearchableTrait; /** * Searchable rules. * * @var array */ protected $searchable = [ /** * Columns and their priority in search results. * Columns with higher values are more important. * Columns with equal values have equal importance. * * @var array */ 'columns' => [ 'users.first_name' => 10, 'users.last_name' => 10, 'users.bio' => 2, 'users.email' => 5, 'posts.title' => 2, 'posts.body' => 1, ], 'joins' => [ 'posts' => ['users.id','posts.user_id'], ], ]; public function posts() { return $this->hasMany('Post'); } }usar :
$users = User::search($query)->get();