gpt4 book ai didi

php - array_map() : Argument #2 should be an array

转载 作者:行者123 更新时间:2023-12-05 06:26:00 25 4
gpt4 key购买 nike

当用户尝试创建产品时,我收到此错误array_map(): Argument #2 should be an array

我从这个解决方案更改了我的代码 How to make each authenticated user only see their own product ,现在它给了我那个错误。

产品 Controller

class productController extends Controller
{

public function index(Request $request)
{
$userId = $request->user()->id;
$products = products_model::where('user_id', $userId)->get();
return view('seller.product.index',compact('products'));
}




public function create()
{
return view('seller.product.create');
}

public function seller()
{
$products=products_model::all();
return view('seller.product.index',compact('products'));
}


public function store(Request $request)
{

$formInput=$request->except('image');
$this->validate($request, [
'pro_name'=> 'required',
'pro_price'=> 'required',
'pro_info'=> 'required',
'user_id' => \Auth::id(),
'image'=>'image|mimes:png,jpg,jpeg|max:10000'
]);

$image=$request->image;
if($image){
$imageName=$image->getClientOriginalName();
$image->move('images', $imageName);
$formInput['image']=$imageName;
}

products_model::create($formInput);
return redirect()->back();
}


public function show($id)
{
//
}


public function edit($id)
{
//
}


public function update(Request $request, $id)
{
//
}


public function destroy($id)
{
$userId = $request->user()->id();
$deleteData=products_model::where('user_id', $userId)->findOrFail($id);
$deleteData->delete();

return redirect()->back();
}
}

产品型号

class products_model extends Model
{
protected $table='products';
protected $primaryKey='id';
protected $fillable= ['user_id','pro_name','pro_price','pro_info','image','stock','category_ id'];
}

产品表

class CreateProductsTable extends Migration
{

public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('pro_name');
$table->integer('pro_price');
$table->text('pro_info');
$table->integer('stock');
$table->string('image')->nullable();
$table->timestamps();

$table->bigInteger('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}


public function down()
{
Schema::dropIfExists('products');
}
}

更新我的代码后出现此错误SQLSTATE[HY000]:一般错误:1364 字段“user_id”没有默认值(SQL:插入产品(pro_name,pro_price,stock,pro_info,i`

最佳答案

更改您的验证功能。而不是使用 $this->validate(),使用 $request->validate() 方法:

$request->validate([
'pro_name'=> 'required',
'pro_price'=> 'required',
'pro_info'=> 'required',
'user_id' => 'required|integer',
'image'=>'image|mimes:png,jpg,jpeg|max:10000'
]);

如果验证规则通过,您的代码将继续正常执行;但是,如果验证失败,将抛出异常,并自动将正确的错误响应发送回用户。

另一种解决方案:

添加

use Validator;

到你的类(class)。

$validator = Validator::make($request->all(), [
'pro_name'=> 'required',
'pro_price'=> 'required',
'pro_info'=> 'required',
'user_id' => 'required|integer',
'image'=>'image|mimes:png,jpg,jpeg|max:10000'
]);

if($validator->fails()){
//Validation does not pass logic here
}else{
//
}

还有一个:创建 form request , 与

php artisan make:request RequestName

该文件将在 app\Http\Requests 目录中创建。

在文件中,将您的规则添加到 rules 方法:

public function rules()
{
return [
'pro_name'=> 'required',
'pro_price'=> 'required',
'pro_info'=> 'required',
'user_id' => 'required|integer',
];
}

改变authorize方法,返回true:

public function authorize()
{
return true;
}

在您的store 方法中,将Request $request 替换为RequestName $request。现在您不需要验证 store 方法中的 $request。只有验证成功才会入库;

你的 store 方法现在应该看起来像

public function store(RequestName $request)
{
$formInput=$request->except('image');

$image=$request->image;
if($image){
$imageName=$image->getClientOriginalName();
$image->move('images', $imageName);
$formInput['image']=$imageName;
}

products_model::create(array_merge(
$formInput, ['user_id' => Auth::user()->id]
));
return redirect()->back();
}

Dont forget to use App\Http\Requests\RequestName

如果验证失败,将生成重定向响应以将用户送回他们之前的位置。错误也将闪现到 session 中,以便它们可供显示。如果请求是 AJAX 请求,将向用户返回带有 422 状态代码的 HTTP 响应,其中包括验证错误的 JSON 表示形式。您可以了解有关请求验证的更多信息 here .

[编辑]我将 users_id 规则更改为 user_id,以匹配您的外键名称。我想你问这个问题的时候打错了。

希望对您有所帮助。

关于php - array_map() : Argument #2 should be an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56501018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com