Équivalent Laravel-5 'LIKE' (Eloquent)


143

J'utilise le code ci-dessous pour extraire certains résultats de la base de données avec Laravel 5.

BookingDates::where('email', Input::get('email'))->orWhere('name', 'like', Input::get('name'))->get()

Cependant, orWhereLike ne semble correspondre à aucun résultat. Que produit ce code en termes d'instructions MySQL?

J'essaie de réaliser quelque chose comme ce qui suit:

select * from booking_dates where email='my@email.com' or name like '%John%'

Réponses:


380

Si vous voulez voir ce qui est exécuté dans la base de données, utilisez dd(DB::getQueryLog())pour voir quelles requêtes ont été exécutées.

Essaye ça

BookingDates::where('email', Input::get('email'))
    ->orWhere('name', 'like', '%' . Input::get('name') . '%')->get();

35
cette injection SQL de requête est-elle protégée?
partho

23
@partho Oui. Laravel filtre la chaîne entière que vous passez comme troisième argument de la whereméthode.
Finesse

8
Lorsque l'injection est protégée, vous pouvez rechercher des% inattendus dans l'entrée utilisateur. Par exemple, LIKE "% John%" et LIKE "John%" fonctionnent différemment (vous pourriez seulement avoir l'intention de ce dernier). Considérez également une entrée vide, puis de "%" seul, ce qui pourrait également conduire à des résultats non intentionnels à partir du code ci-dessus.
Ian Fleeton

4
D'accord avec Ian. Laravel n'échappe que partiellement. Il y a encore beaucoup de mal possible si vous n'échappez pas correctement au LIKE. Voici comment: stackoverflow.com/a/42028380/329062
Greg

9
$data = DB::table('borrowers')
        ->join('loans', 'borrowers.id', '=', 'loans.borrower_id')
        ->select('borrowers.*', 'loans.*')   
        ->where('loan_officers', 'like', '%' . $officerId . '%')
        ->where('loans.maturity_date', '<', date("Y-m-d"))
        ->get();

-> where ('pret_officers', 'like', '%'. $ officerId. '%') où credit_officers est le champ sérialisé
sadiq rashid

7

J'ai des perspectives pour cela, j'espère que cela aidera quelqu'un.

public function scopeWhereLike($query, $column, $value)
{
    return $query->where($column, 'like', '%'.$value.'%');
}

public function scopeOrWhereLike($query, $column, $value)
{
    return $query->orWhere($column, 'like', '%'.$value.'%');
}

Usage:

$result = BookingDates::whereLike('email', $email)->orWhereLike('name', $name)->get();

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.