Cela m'a étonné. Je suis en train de filtrer $ages=Ages::all();
basée sur un champ de productmask utilisant l'opérateur bitwise &
(code doit être explicite)laravel 5.4 opérations bitwise ne fonctionne pas comme prévu (éloquent)
J'ai essayé
@foreach($ages->where('productmask', '&', 2) as $option)
et
@foreach($ages->filter(function($i){return ((int)($i->productmask & 2)); }) as $option)
et
@foreach($ages->filter(function($i){return ((int)($i->productmask & 2) == 2); })->values() as $option)
et aucun wo rk quand productmask = 3 mais fonctionne quand le masque de produit est exactement 2.
Quelles sont mes options ici (sans jeu de mots)? Pourquoi ça ne marche pas?
Je suis assez sûr que cela fonctionnerait si je faisais un \DB::whereRaw
(parce que je peux faire exécuter sur le Db et il fonctionne et je reçois les 2 et 3 entrées):
SELECT * from ages WHERE productmask&2
mais ici c'est contourner couramment et frapper la base de données à l'intérieur d'une vue ?? Pas bonne forme.
Est-ce que quelqu'un qui utilise des masques de bits là-bas est déjà dans ce cas?
merci d'avance.
Oui, j'ai regardé cela mais je préfère ne pas avoir à ajouter un nouveau paquet et implémenter de nouveaux types de champs juste pour atténuer ce qui semble être un simple problème mathématique avec Eloquent. Ou du moins avec eux, j'essaie de l'utiliser. De vendeur/Laravel/Cadre/src/Illuminate/Base de données/Requête/Builder.php protégées $ opérateurs = [ '=', '', '<', '><=', '> =', '<>', '! =' , 'like', 'like binary', 'like', 'between', 'ilike', '&', '|', '^', '<<', '>>', 'rlike', 'regexp' , 'not regexp', '~', '~ *', '! ~', '! ~ *', 'semblable à', 'non similaire à', ]; – harrisoftware
s'il vous plaît vérifier la réponse mise à jour –
j'ai essayé whereRaw. Cette méthode semble uniquement disponible sur la classe ('Ages: whereRaw()'). J'ai trouvé une méthode introuvable quand j'ai essayé de l'utiliser sur les résultats de '$ ages = Ages :: all();'. '$ ages-> whereRaw()' a échoué. – harrisoftware