Laravel не работает метод updateOrCreate - PullRequest
0 голосов
/ 23 апреля 2020

У пользователя есть настройка профиля. Я хочу, чтобы пользователь изменил некоторые поля для обновления. Но я создал новый столбец и должен быть обновлен. Может быть, кто-то не делает это правильно. Помоги пожалуйста. Большое спасибо.

Контроллер

     public function profile_settings_post(Request $request){
          // Auth Specialist
          $user = Auth::user();
          // Data Specialist Validate
          $data = $request->validate([
              'first_name' => 'nullable|string',
              'last_name' => 'nullable|string',
              'phone_number' => 'nullable|integer',
              'gender' => 'nullable',
              'date_of_birth' => 'nullable',
              'about_me' => 'nullable',
              'address' => 'nullable',
              'city' => 'nullable|string',
              'country' => 'nullable|string',
              'postal_code' => 'nullable|integer',
          ]);
            $profile = $user->profile_settings()->updateOrCreate($data);
            $profile->save();

          // RETURN REDIRECT PROFILE SETTINGS INDEX
        return redirect()->route('frontend.specialist.profile.settings');
    }

Модель пользователя

 class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public static function countPercent($count, $maxCount){
        //one percent
        $one_percent = $maxCount / 100;
        // $count how much is percent
        $percent = $count / $one_percent;
        return $percent;
    }

    // 1 User have 1 profile settings (ONE TO ONE)
    public function profile_settings(){
        return $this->hasOne(Profile_Settings::class);
    }

}

Profile_Settings Модель:

 class Profile_Settings extends Model
{
    // Fill in db
    protected $fillable = [
        'first_name', 'last_name', 'phone_number',
        'gender', 'date_of_birth', 'about_me',
        'address', 'city', 'country', 'postal_code',
    ];

    // Profile settigns model belongs to User
    public function user(){
        return $this->belongsTo(User::class);
    }
}

User profile settings

Когда я редактирую какое-то поле. В базе данных создано новое поле

enter image description here

база данных настроек профиля не работает обновление создать новые столбцы

1 Ответ

0 голосов
/ 23 апреля 2020

Вы, вероятно, не очень внимательно прочитали, как работает updateOrCreate. Оно выполняет обновление на основе передаваемого вами условия и обновляет нужные поля, поэтому вам нужно будет передать 2 массива.

Пример из Laravel webitse

// If there's a flight from Oakland to San Diego, set the price to $99.
// If no matching model exists, create one.
$flight = App\Flight::updateOrCreate(
    ['departure' => 'Oakland', 'destination' => 'San Diego'],
    ['price' => 99, 'discounted' => 1]
);

Таким образом, это означает, что мы обновляем все строки, где 'вылет' = 'Окленд', 'пункт назначения' = 'Сан-Д iego' и установив цену до 99 $.

В вашем случае вы должны решить условие, когда вы должны выполнить запрос на обновление, это будет 1-й массив, а также решить, какие поля следует обновить, поместите его во 2-й массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...