我正在try 将一个简单的belongsToMany关系保存到我的数据库中.首先,我的桌子:

    Schema::create('user_activity_log', function (Blueprint $table) {
        $table->unsignedBigInteger('activity_id');
        $table->unsignedBigInteger('log_id');
        $table->unsignedInteger('sets');
        $table->unsignedInteger('reps');
        $table->primary(['activity_id', 'log_id']);

        $table->foreign('activity_id')->references('id')->on('user_activities')
            ->onDelete('cascade')
            ->onUpdate('cascade');

        $table->foreign('log_id')->references('id')->on('user_logs')
            ->onDelete('cascade')
            ->onUpdate('cascade');
    });

我的LogActivity型号有这样的关系:

日志(log):

public function activities()
{
    return $this->belongsToMany(练习::class, 'user_activity_log', 'log_id', 'activity_id')->withPivot(['sets', 'reps']);
}

练习:

public function logs()
{
    return $this->belongsToMany(日志(log)::class, 'user_activity_log', 'activity_id', 'log_id')->withPivot(['sets', 'reps']);
}

在这两个模型中,我都使用:

protected $guarded = [];

在向现有日志(log)添加新活动时,在我的存储方法中,我只需执行以下操作:

$log->activities()->syncWithoutDetaching([$request->input('activity_id'), ['sets' => $request->input('sets'), 'reps' => $request->input('reps')]]);

我收到以下错误:

SQLSTATE[HY000]: General error: 1364 Field 'sets' doesn't have a default value 

insert into `user_activity_log` (`activity_id`, `log_id`) values (3, 2)

我不明白为什么它不能挽救setsreps.当我把$request值加到dd()时,它们就在那里了.我的$log也在那里.

推荐答案

你拨打syncWithoutDetaching是有问题的.

您的数据必须是关联数组,其中键是ID,值是数据.

在代码中,您使用了索引数组而不是关联数组,其中第一个索引是id,第二个索引是data,但它必须是键为activity_id的关联数组,并且该键的值必须是包含setsreps的关联array.

$log->activities()->syncWithoutDetaching([
    $request->input('activity_id') => [
        'sets' => $request->input('sets'),
        'reps' => $request->input('reps')
    ]
]);

Php相关问答推荐

添加自定义Metabox到WooCommerce管理订单,启用HPOS

按制造商、型号和年份范围判断数据的存在性

自定义WooCommerce查询字符串仅显示前3个产品

WooCommerce基于元数据的自定义范围目录排序

RediSearch PHP希望我在每次使用时定义所有字段

WooCommerce:在 checkout 审核单和发票中显示定制产品数据

Symfony 6.2 IsGraned具有多个角色

使用与OpenSSL命令行兼容的AES-256-CTR为大型文件创建php代码OpenSSL加密

在个人资料页面上显示个人资料图像

函数存储到变量中

使用HPOS过滤WooCommerce中的订单列表

防止同时从Laravel中的用户帐户中提取

添加不存在的订单元数据以扩展WooCommerce管理订单搜索

如果所有请求都通过index.php路由,如何使用htaccess文件强制使用HTTPS?

使用 php Carbon 获取两个日期之间的随机日期和时间

如果在 APIPlatform 3.1 中的同一资源上使用处理器,Messenger 将无法工作

在 PHP 8.2 中使用 PHP Spreadsheet 和 CodeIgniter 3 导出 Excel 时出错

如何获得没有运输等级的产品

URL中包含"&"与DirectoryIterator不兼容

使用 OOP PHP 创建动态 WHERE 子句.如何实现 BETWEEN 运算符?