我正在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']);
}

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

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

我收到以下错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' 

select * from `user_activity_log` where `id` = 0 limit 1

不过,数据正在保存,所以当我刷新页面并再次提交表单时,没有任何错误.我不明白为什么它要在user_activity_log表中找到id.

推荐答案

因此,经过进一步调查,这似乎是Spatie Activitylog的问题.不过,与我的模特的名字等没有任何关系.究竟是什么问题仍在调查中.

所以我使用了一个数据透视模型"ActivityLog"来记录数据透视表中的活动.但是我忘了在activity_log表中添加主键.所以这与attachsyncWithoutDetaching实际上完全没有关系.

Php相关问答推荐

使用额外的输入字段自定义WooCommerce单个产品

未在moodle上运行的计划任务

PHP如何将ARRAY_MAP与Reset()配合使用

如果WooCommerce中存在特定的运输方式,则隐藏其他运输方式

如何显示每个分类的当前术语的帖子中包含的前20个标签,不包括标签分类

如何在php中生成包含第100秒的时间序列?

PHP MySQL求和子树并与父树累加

将数组推送到数组时,数组推送()出现问题

laravel中获取的数据会自动更改时间戳值

WooCommerce短代码,显示特定产品的购物车徽章中的当前数量

如何将LARAVEL模块路径和项目路径合并,因为当我使用模块路径时,它们会覆盖项目路径

Laravel 10中的Validator类

隐藏WooCommerce管理子菜单;主页;来自store 经理

Shopware 6插件:由于删除了配置密钥,更新后配置值不正确

如何在 Phpunit 的静态提供程序中创建测试双打?

防止使用woocommerce_checkout_process下单

我需要一个正则表达式模式来获取在不包含特定字符串后面的模式中的文本

如何在WooCommerce管理产品列表中显示运输类别列

PHP for each 函数打印 td

即使密码匹配,密码处理程序也会返回错误