Laravel5.8 我无法将数据存储到我的 sql 服务器

Laravel5.8 I cannot store data to my sql server

我正在设置用户个人资料页面,但我无法将数据插入 mysql 服务器。

我无法解决这个问题。

我的个人资料文件夹中有 index.blade.php,从索引页面转到 create.blade.php

When I enter the submit button, my page redirects to index.blade.php, but in mysql server, nothing is recorded.

web.php

Route::prefix('user')->group(function(){
    Route::resource('profile', 'UserController');
});

create.blade.php

<form action="{{route('profile.store')}}" method="POST">@csrf

                    <ul class="information">
                        <li>Name :<br>
                            <input type="text" class="name" name="name">
                        </li><br>
                        <li>Gender :<br>
                            <div class="gender">
                                <select name="gender" id="" name="gender">
                                    <option class="option" value="" selected="selected">Select Gender</option>
                                    <option value="male" >Male</option> 
                                    <option value="female" class="selected">Female</option> 
                                    <option value="any">Any</option> 
                                </select>       
                            </div>
                        </li>   
                        <li>Country :<br>
                            <div class="country">
                                <select name="country" id="" name="country">
                                    <option value="" selected="selected">Select Country</option> 
                                    <option value="United States" class="selected">United States</option> 
                                    <option value="United Kingdom">United Kingdom</option>      
                                </select>
                            </div>    
                        </li><br>
                        <li>Birthday :<br>
                            <input type="text" class="birthday" id="bod" name="bod">
                        </li><br>
                        <li>User Description :<br>
                            <textarea name="description" id="" cols="60" rows="10"></textarea></li>
                    </ul>
                    <button type="submit" class="saveBtn">Save</button>
                </div>
            </form>
            </div>

UserController.php

public function index()
    {
        return view('profile.index');
    }

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

public function store(Request $request) {

        $user_id = auth()->user()->id;

        Profile::where('user_id',$user_id)->update([
            'name'=>request('name'),
            'gender'=>request('gender'),
            'country'=>request('country'),
            'bod'=>request('bod'),
            'description'=>request('description')
        ]);

        return redirect()->route('profile.index');
    }

Profile.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Profile extends Model
{
    protected $fillable = [
        'user_id','name', 'gender', 'country', 'bod', 'description'
    ];
}

如果您需要更新现有记录:

$user_id = auth()->user()->id;

$update = Profile::where('user_id',$user_id)->update([
                'name'=>$request->name,
                'gender'=>$request->gender,
                'country'=>$request->country,
                'bod'=>$request->bod,
                'description'=>$request->description
            ]);

    if($update){
        return redirect()->route('profile.index');
    }else{
        //do something if fails
    }

但是如果您需要添加新的个人资料,那么:

$create= Profile::create([
                    'user_id'=>auth()->user()->id,
                    'name'=>$request->name,
                    'gender'=>$request->gender,
                    'country'=>$request->country,
                    'bod'=>$request->bod,
                    'description'=>$request->description
                ]);

        if($create){
            return redirect()->route('profile.index');
        }else{
            //do something if fails
        }

试试这个,假设您正在尝试 post 新记录:

public function store(Request $request) {

    $profile = new Profile;

    $profile->name = $request->input('name');
    $profile->gender = $request->input('gender');
    $profile->country = $request->input('country');
    $profile->bod = $request->input('bod');
    $profile->description = $request->input('description');

    $profile->save();

    return redirect()->route('profile.index');
}

在您的 Profile 模型中,使 'name', 'gender','country''bod','description' 使这些字段 可填充

您的代码仅更新 Profile 模型(如果它首先存在)。如果您不知道记录是否存在,您可能想尝试 updateOrCreate 方法。它将更新现有记录,或者如果没有这样的记录,它将创建一个新记录:


public function store(Request $request) {

    $user_id = auth()->user()->id;

    Profile::updateOrCreate(
        ['user_id' => $user_id], // search requirements
        [
            // fields to update or create record with
            'name' => request('name'),
            'gender' => request('gender'),
            'country' => request('country'),
            'bod' => request('bod'),
            'description' => request('description')
        ]
    );

    return redirect()->route('profile.index');
}


在您的用户模型中建立这样的 userProfile 关系

class User extends Model
{
    protected $fillable = ['what ever you want to fill in user model'];

    public function userProfile()
    {
        return $this->hasOne(Profile::class, 'user_id');
    }
}

然后你可以在你的控制器中像这样更新你的关系数据

$user = ['user_id'=>auth()->user()->id];

$order->location()->updateOrCreate($user, $arrayOfData);

在你的模型中使用这个,

protected $fillable = ['name', 'gender', 'country'];

或者如果你可以使用它,

protected $guarded=[];