【问题标题】:Laravel5.8 I cannot store data to my sql serverLaravel 5.8 我无法将数据存储到 mysql 服务器
【发布时间】:2020-01-19 01:46:49
【问题描述】:

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

我无法弄清楚并解决这个问题。

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

当我输入提交按钮时,我的页面重定向到index.blade.php, 但在mysql 服务器中,没有任何记录。

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');
    }

配置文件.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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

【问题讨论】:

  • dd($request('name'));store 函数中运行会产生什么结果?你得到了正确的值吗?
  • 不清楚您是在尝试存储新记录还是更新旧记录。如果它是新的,我猜你应该使用 save() 而不是 update。
  • @GayanS.Muthukumarana '函数名必须是字符串'出现。
  • @fmsthird 我要插入第一条记录。
  • 我已经给出了答案。试试看

标签: php database laravel laravel-5 store


【解决方案1】:

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

$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
        }

【讨论】:

  • 谢谢,但是没有用,我尝试dd($request('name')); 时仍然出现同样的错误;
  • dd($request-&gt;name); 的结果是什么?
  • 我有一个名字,我输入了“John Doe”!
  • 好的,那么您只需将其添加到您的Profile 模型中:protected $fillable = ["name", "gender", "country" ,"bod", "description"];
【解决方案2】:

试试这个,假设你正在尝试发布新记录:

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');
}

【讨论】:

  • 我可以插入数据,但我需要 user_id 因为用户只有一个配置文件。
  • 你可以在帖子中包含 Profile 模型吗
  • 你可以加$profile-&gt;user_id = auth()-&gt;user()-&gt;id;
  • 谢谢!我能做到!但是如何存储编辑过的数据?
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    如果 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');
    }
    
    
    

    【讨论】:

    • 我得到一个错误 ['user_id' => $user_id],这里 $user_id 没有定义。
    • 您是否通过运行以下命令分配了$user_id$user_id = auth()-&gt;user()-&gt;id;
    • 这只是替换Profile::where语句,而不是整个方法体。
    • @YoheiUmezu:更新了我的答案以显示修改后的store 方法的完整代码。
    【解决方案5】:

    在您的用户模型中,像这样建立 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);
    

    【讨论】:

      【解决方案6】:

      在你的模型中使用这个,

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

      或者如果你可以使用它,

      protected $guarded=[]; 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-06
        • 2016-09-02
        • 1970-01-01
        • 2019-09-03
        • 2020-01-15
        • 2016-12-14
        • 1970-01-01
        • 2020-10-24
        相关资源
        最近更新 更多