Debug School

rakesh kumar
rakesh kumar

Posted on

Laravel Error: count(): Argument #1 ($value) must be of type Countable|array, string given

*my code is *

$influencer_email= $input['influencer_email'];  
                  log::info($influencer_email);                  
                  $influencer_name= DB::table("addprofiles")->whereIn('user_email',$influencer_email)->pluck('user_name');
Enter fullscreen mode Exit fullscreen mode

when i apply this code i got empty array

$influencer_email_array = explode(',', $influencer_email);   
                  log::info($influencer_email_array);   and [2024-01-09 06:32:22] local.INFO: array (
  0 => '["admins@gmail.com"]',
)   but when i apply  $influencer_name= DB::table("addprofiles")->whereIn('user_email',$influencer_email_array)->get();
                  log::info("after param influencer_name");
                  log::info($influencer_name); even email  admins@gmail.com  is available in database but because of quotes'["admins@gmail.com"]'
Enter fullscreen mode Exit fullscreen mode

reason
after explode i got output

$influencer_email_array = explode(',', $influencer_email);   
[2024-01-09 06:32:22] local.INFO: array (
  0 => '["admins@gmail.com"]',
)
Enter fullscreen mode Exit fullscreen mode

It seems like the email addresses are being passed as a string within an array. Instead of using explode directly, you might need to adjust how you're passing the email addresses to ensure they are treated as separate strings.

If your input is coming as a JSON-encoded string, you can use json_decode to convert it into an array. For example:

solution

 $influencer_email_array = json_decode($influencer_email, true);  
                  log::info($influencer_email_array);       
                  $influencer_name= DB::table("addprofiles")->whereIn('user_email',$influencer_email_array)->distinct()->pluck('user_name');
                  log::info("after param influencer_name");
                  log::info($influencer_name);
Enter fullscreen mode Exit fullscreen mode

after json decode i got output

 $influencer_email_array = json_decode($influencer_email, true);
 array (
  0 => 'admins@gmail.com',
)  
Enter fullscreen mode Exit fullscreen mode

output

log::info($influencer_name);
["admins"] 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)