Потому что сначала учатся, потом пишут, а не наоборот.
Сначала $body_type был массивом, далее его же ты сделал строкой, потом еще зачем-то обернул в кавычки, а после всех манипуляций пытаешься скормить все это говно методу whereIn который от тебя ждет массив, а не строку
<?php
/**
* Вот тут было так, в этом месте у тебя массив превратился в строку
* $body_type = implode("','",$body_type);
*/
$body_type_string = implode("','",$body_type);
/**
* Далее эту же строку поместил в кавычки. Наверное для пущей надежности
* $body_type = "'".$body_type."'";
*/
echo $body_type_string;
$poisks = DB::table('items')
->where('brand',$brand)
->where('location',$location)
->where('fuel_type',$fuel_type)
->whereBetween('price', [$price_from, $price_to])
->whereIn('body_type', $body_type)
->whereIn('model', ['100','80','q5','a1'])
->orderBy('id', 'asc')
->paginate(5);
dd($poisks);