Параметр count () должен быть массивом или объектом, который реализует счетное в laravel

Это код здесь:

protected function credentials(Request $request)
{
    $admin=admin::where('email',$request->email)->first();
    if (count($admin))
    {
       if ($admin->status==0){
           return ['email'=>'inactive','password'=>'You are not an active person, Please contact to admin'];
           }
           else{
               return ['email'=>$request->email,'password'=>$request->password,'status'=>1];
           }
       }
       return $request->only($this->username(), 'password');
    }

Когда я запускаю код, эта ошибка становится:

"count(): Parameter must be an array or an object that implements Countable"

Вы получаете первую запись, которая соответствует электронной почте, она никогда не вернет никаких ошибок.

Kamal Paliwal 27.10.2018 12:16

Вы можете попробовать функцию is_countable в php. stackoverflow.com/a/54806221/3016038

Vipul 21.02.2019 12:44

вот быстрое исправление sdtuts.com/… даже параметр не array

user3151197 17.03.2019 10:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
20
3
88 881
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Вы должны проверить, является ли он нулевым, а не count, потому что вы запрашиваете один результат с first() только это

if ($admin)

сделаю это.

если вы используете возврат коллекции с помощью ->get(), вы можете проверить $admin->count().

Тогда что мне делать, пожалуйста, скажи мне

faraz 27.10.2018 12:16

Я пробую это так: $ admin = admin :: where ('email', $ request-> email) -> first (); // $ count = count ($ admin) if ($ admin-> count ()) {if ($ admin-> status == 0) {return ['email' => 'inactive', 'password' => ' Вы не активный человек, обратитесь к админу ']; } else {return ['email' => $ request-> email, 'password' => $ request-> password, 'st‌ atus' => 1]; }} return $ request-> only ($ this-> username (), 'пароль');

faraz 27.10.2018 12:21

но когда, если условие истинно, появляется пустая страница, а не печатать сообщение в условии, если

faraz 27.10.2018 12:22

@Hasan опубликовал код, о котором я говорю. Я хотел дать вам подсказки, чтобы вы могли решить эту проблему самостоятельно. Но вот оно.

nakov 27.10.2018 12:24

Вы правы, но у меня тоже проблема, ошибка не решается

faraz 27.10.2018 12:32

Обратите внимание, что здесь, когда вы используете метод count(), должен быть счетный элемент, например массив или объект, реализующий ArrayAccess.

Admin::where('email',$request->email)->first();

Но метод first() дает вам единственный элемент, а не коллекцию или массив. Метод get() возвращает вам счетную коллекцию с найденными элементами

Вместо использования count вы можете напрямую проверить саму переменную, определена ли она или равна нулю.

if ($admin){
  // do something here
}

или вы можете использовать метод is_null()

if (!is_null($admin)){
  // do something here
}

Я пробую первый метод и использую if ($ admin), но появляется ошибка, которая продолжается и показывает пустую страницу, которая не отображается, если состояние сообщения о блоке

faraz 27.10.2018 12:35

и если я использую метод get () и если ($ admin), то появляется эта ошибка «Свойство [статус] не существует в этом экземпляре коллекции».

faraz 27.10.2018 12:38

Ошибка @faraz имеет смысл, потому что метод get дает вам коллекцию. И перед получением статуса нужно сначала выбрать товар. как $admin->{0}->status, и я не знаю, что вы делаете с информацией об учетных данных, поэтому я не могу понять, почему вы получаете пустую страницу. Вы можете в любое время проверить свой код с помощью метода dd. Например, поместите метод dd внутри if statment и проверьте, работает ли оператор хорошо? Или поделитесь с нами своим кодом, чтобы помочь вам

Teoman Tıngır 27.10.2018 13:03

Переменная $admin не является ни массивом, ни объектом, реализующим счетный. Когда вы используете first(), результатом будет объект модели, если запись будет найдена, иначе она будет нулевой. Для этого условия вы можете использовать:

if (!empty($admin)) {
    //
}

Просто замените if (count($admin)) на if (!empty($admin)).

И когда вы используете метод get() для получения нескольких записей, вы можете проверить:

if ($admins->count() > 0) {
    //
}
$admin = null;
var_dump(count($admin));

выход: Предупреждение: count (): Параметр должен быть массивом или объектом, который реализует Countable в… в строке 12 // начиная с PHP 7.2

если условие должно быть таким:

if (isset($admin) && count($admin))

Сэр, я пробую это, но ничего не происходит, просто появляется пустой

faraz 27.10.2018 13:20

Я использую! empty over isset

Harry Bosh 18.03.2019 23:07
Well,
$admin=Admin::where('email',$request->email)->first();
//It will always return an **object**.
And make sure you included Admin model in your controller like as.
Use App\Admin;
at the same time check that you will have to mention which field of table needs to be fillable like in your model such as 
protected $fillable = [
'first_name',
'last_name'
];

whatever data you will going to save in your database.
and then check object is null or not
I mean is.

if ($admin && $admin!==null){
  //do whatver you want to do.
}

Вы упомянули модель администратора в контроллере. и еще одно, что вам нужно сделать, это. $ request-> input ('электронная почта'); сначала сделайте это изменение, а перед тем как продолжить, просто введите эхо "<pre>"; print_r ($ admin);

sonu pokade 27.10.2018 14:52

Нет, сэр, он не работает 1-й, если условие работает, когда оно входит, затем снова, если ($ admin-> status == 0) не работает, его часть else работает, я не знаю, почему возникает ошибка, если часть, почему она не работает

faraz 27.10.2018 17:51

@faraz Значит, теперь вы не получаете ошибку по счету?

sonu pokade 27.10.2018 18:42

Да, потому что я заменяю count на! Empty, и ошибка возникает во внутреннем состоянии if if ($ admin-> status == 0) не работает, а еще условие работает, когда я даю правильный код

faraz 27.10.2018 18:44

Его нельзя сравнивать с нулем, потому что неактивный статус электронной почты равен 0, но когда я использую активную электронную почту, которая еще является частью статуса sith, равной 1, она работает

faraz 27.10.2018 18:46

учетные данные защищенной функции (Request $ request) {$ admin = admin :: where ('email', $ request-> email) -> first (); if (! empty ($ admin)) {if ($ admin-> status) {return ['email' => $ request-> email, 'password' => $ request-> password, 'st‌ atus' => 1]; } else {return ['email' => 'inactive', 'password' => 'Вы не активный человек, обратитесь к администратору']; }} return $ request-> only ($ this-> username (), 'пароль'); }

sonu pokade 27.10.2018 19:18

пытаясь получить значение $ admin-> status, вручную добавив адрес электронной почты в запрос, поэтому вам нужно 2 администратора, один из которых имеет статус 0, а второй - со статусом 1. и выяснить, что вы получаете, и только после этого создайте условие как $ admin-> статус ...

sonu pokade 27.10.2018 19:46

Используйте isset($admin->id) вместо count($admin)

Попробуй это :

protected function credentials(Request $request)
{
    $admin=admin::where('email',$request->email)->first();
    if (isset($admin->id)))
    {
       if ($admin->status==0){
           return ['email'=>'inactive','password'=>'You are not an active person, Please contact to admin'];
           }
           else{
               return ['email'=>$request->email,'password'=>$request->password,'status'=>1];
           }
       }
       return $request->only($this->username(), 'password');
    }

добавьте этот ваш контроллер в этот код:

 $user = User::where('email',$request->email)->first();
        if ($user){
            return redirect()->back()->with('errors','We cant find a user with that e-mail address.');
        }else{
            $user->password = bcrypt($request->new_password);
            $user->update();
            return redirect()->back()->with('success','Success');
        }

Это происходит из-за того, что в PHP 7.2 NULL в count () return Warning. Вы можете попробовать изменить

count($admin)

к

count((is_countable($admin)?$admin:[]))

Мне это нравится, потому что он работает и без Laravel.

Oliver Hörold 17.03.2020 11:40

FWIW: is_countable () представлена ​​в PHP7.3.

Rob 11.12.2020 18:06
Ответ принят как подходящий

Это мое решение:

count(array($variable));

надеюсь, что это работает!

Будьте осторожны. Если переменная $ уже является массивом, она будет [[$ переменная]], а количество будет равно 1

WigglyWorld 02.12.2020 00:16

Другие вопросы по теме