SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (Laravel) - PullRequest
0 голосов
/ 10 апреля 2019

Как устранить эту ошибку.

SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено (kindmill_db. device_tokens,ОГРАНИЧЕНИЕ device_tokens_user_id_foreign ИНОСТРАННЫЙ КЛЮЧ (user_id) ССЫЛКИ users (id) НА УДАЛЕННЫЙ КАСКАД) (SQL: вставка в значения device_tokens (deviceToken, updated_at, created_at) (dqq37149351b3710139155ba81241dd2329191195191919)-04-10 06:35:31, 2019-04-10 06:35:31))

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

class CreateDeviceTokensTable extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('device_tokens', function (Blueprint $table) {
        $table->bigInteger('id', true)->unsigned();
        $table->bigInteger('user_id')->unsigned()->index('user_id');
        $table->string('deviceToken');
        $table->timestamps();

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

    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('device_tokens');
}
}

вот мой код контроллера

public function deviceToken(UpdateDeviceToken $request)
{
    $user = JWTAuth::parseToken()->toUser();

    // $deviceToken = DeviceToken::where('deviceToken', $deviceToken)->count();
    // if($deviceToken == 0)
    // {   
    //     $user = $user->deviceTokens()->create(){
    //         'deviceToken' = $request->input('deviceToken');
    //     }   
    // } else {

    // }

    $deviceToken = DeviceToken::updateOrCreate([
        'deviceToken' => $request->input('deviceToken'), 
    ],
    [
        'user_id' => $user->id,
        'deviceToken' => $request->input('deviceToken'),
    ]);
    return $user;
}

1 Ответ

0 голосов
/ 10 апреля 2019

В моей модели DeviceToken.php я добавил user_id в защищенную переменную $ fillable.

, которая устраняет эту ошибку.

Вот код модели:

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;

class DeviceToken extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'user_id', 'deviceToken',
    ];

    /**
     * Get the user that owns the token.
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...