Блин, прошло минимум полчаса (а скорее всего ты над этим вопросом ещё до сообщения в чат думал), но ты так и не смог сам найти различие в названии переменной
public function edit($id)
{
$categories = Product::whereNull('category_id')->with('childrenCategories')->get();
$products = Product::where('id',$id)->first();
return view('product.edit', compact('categories','products'));
}