2 votes

Appel à une méthode non définie Illuminate \Database\Query\Builder ::isEmpty sur chargement rapide laravel

J'ai un Cart modèle comme celui-ci :

class Cart extends Model
    {
        protected $table = 'cart';

        protected $fillable = ['user_id', 'delivery_method'];

        public function products ()
        {
            return $this->belongsToMany(Product::class, 'cart_products', 'cart_id', 'product_id')->withPivot('quantity');
        }

    }

Et chariot Les colonnes du tableau sont :

id
user_id
delivery_method
created_at
updated_at

Et il y a un tableau croisé dynamique nommé cart_products de se rapporter Card à un modèle Product Modèle.

Supposons que j'aie un spécifique $user_id Maintenant je veux que le panier avec cet user_id avec leurs produits. pour cela j'ai écrit ceci :

$cartWithProducts = Cart::with('products')->where(['user_id' => $user_id])->first();

if (!$cartWithProducts->isEmpty()) {
//Some codes come here
}

Mais après l'exécution, j'ai eu cette erreur :

Call to undefined method Illuminate\Database\Query\Builder::isEmpty() {"exception":"[object] (BadMethodCallException(code: 0): Call to undefined method Illuminate\\Database\\Query\\Builder::isEmpty() at D:\\wamp\\www\\barlly\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Query\\Builder.php:2461

Je ne veux pas utiliser chargement paresseux approche car demande de renseignements problème. quelle est la solution dans ce cas ?

De plus, chaque utilisateur ne peut avoir qu'un seul panier à la fois.

5voto

ATechGuy Points 1063

Vous pouvez simplement appeler

if ($cartWithProducts) {
//Some codes come here
}

Lisez ceci Réponse :

3voto

redless81 Points 1

Étant donné que vous pouvez avoir plusieurs paniers pour des utilisateurs spécifiques et que vous pouvez en traiter plusieurs, je vous recommande de procéder de la manière suivante :

$cartWithProducts = Cart::whereUserId($user_id)->with('products')->get();

if ($cartWithProducts->isNotEmpty()) {
    //Some codes come here
}

1voto

Alexey Mezenin Points 86781

first() renvoie à null s'il n'y a pas de panier pour l'utilisateur, donc si vous voulez vérifier si elle est vide vous pouvez utiliser is_null() ou empty() au lieu de if (!$cartWithProducts) pour qu'elle reste lisible :

if (is_null($cartWithProducts))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X