dongxinxin7809 2014-07-21 02:21
浏览 27
已采纳

Laravel质量分配[1452]错误

MySql throws error an error when trying to create a new instance of a model. The user_id field is valid, I've tried to set it manually but it didn't work either. User with id 1 exists.

Error:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`production_paperclip`.`widgets`, CONSTRAINT `widgets_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION) (SQL: insert into `widgets` (`updated_at`, `created_at`) values (2014-07-21 02:14:12, 2014-07-21 02:14:12)) 

Query:

\Widget::create(array(
        'title'             => \Lang::get('widget.news_localizer.install.title'),
        'strictName'        => self::strictName,
        'userSettings'      => null,
        'description'       => \Lang::get('widget.news_localizer.install.description'),
        'bodyTemplateName'  => 'admin.dashboard.widgets.news_localizer.index',
        'user_id'           => \Auth::id(),
        ));

Model:

class Widget extends \Eloquent
{
   use SoftDeletingTrait;

   protected $fillable = array('*');
   /**
    * Get the user which installed the widget
    * @return Illuminate\Database\Eloquent\Relations\BelongsTo
    */
   public function user()
   {
    return $this->belongsTo('User');
   }
}

Migration:

public function up()
{
    Schema::create('widgets', function(Blueprint $table)
    {
        $table->increments('id');
        // Name
        $table->string('title', 256);
        $table->index('title');

        // Strict name
        $table->string('strictName')->unqiue();

        // User settings
        $table->text('userSettings')->nullable();

        // A short description
        $table->string('description')->nullable();

        // Body template name
        $table->string('bodyTemplateName');

        // User
        $table->integer('user_id')->length(10)->unsigned();
        $table->foreign('user_id')
        ->references('id')->on('users')
        ->onDelete('no action');

        $table->timestamps();
        $table->softDeletes();
    });
}
  • 写回答

1条回答 默认 最新

  • dongleiqiao2107 2014-07-21 02:58
    关注

    In the Widget model change

    protected $fillable = array('*');
    

    to

    protected $guarded = array('id', 'created_at', 'updated_at');
    

    or

    protected $fillable = array('title', 'strictName', 'userSettings', 'description', 'bodyTemplateName', 'user_id');
    

    In other words you have to explicitly specify fillable fields (white list), or guarded fields (black list). * works only for $guarded, not $fillable and error message clearly shows that. You have only timestamp fields being populated:

    insert into `widgets` (`updated_at`, `created_at`) 
    values (2014-07-21 02:14:12, 2014-07-21 02:14:12)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单