【问题标题】:Laravel INSERT query adding irrelevant columns, making the query failLaravel INSERT 查询添加不相关列,导致查询失败
【发布时间】:2014-03-16 15:04:04
【问题描述】:

我遇到的错误是:

SQLSTATE[42S22]:找不到列:1054 未知列 'user_id' 在 '字段列表' (SQL: 更新companies 设置user_id = 3, updated_at = 2014-03-16 14:59:56 其中id = 1)

但我的代码不应该有 UPDATE 查询,它是一个新的 INSERT!另外,如果你看下面的表结构,没有'user_id'字段,它试图设置?

表结构:

CREATE TABLE `companies` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `company_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `address_1` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `town` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `postcode` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `phone_number` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
  `approved` tinyint(1) NOT NULL,
  `logo_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `logo_file_size` int(11) DEFAULT NULL,
  `logo_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `logo_updated_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

似乎失败的 INSERT 查询:

public function postCreate(){
        $validator = Validator::make(Input::all(), User::$rules);

        if($validator->passes()){

            $user               = new User;
            $user->firstname    = Input::get('firstname');
            $user->surname      = Input::get('surname');
            $user->phone_number = Input::get('phone_number');
            $user->email        = Input::get('email');
            $user->password     = Hash::make(Input::get('password'));

            $user->save();

            $insertedId = $user->id;
            $user = User::where('id','=', $insertedId)->first();
            $user->attachRole(2);

            $company                =   new Company;
            $company->company_name  =   Input::get('company_name');
            $company->address_1     =   Input::get('address_1');
            $company->town          =   Input::get('town');
            $company->postcode      =   Input::get('postcode');
            $company->phone_number  =   Input::get('phone_number');
            $company->approved      =   '0';
            $company                =   Company::create(['logo' => Input::file('logo')]);

            $user->company()->save($company);

用户部分运行良好。然而,公司方面的事情似乎失败了。我不确定它为什么要更新 Companies 的表,什么时候应该插入。

对于徽标,我使用的是Stapler。当我检查错误日志时,这是最后一个 MYSQL 命令 -

insert into `companies` (`logo_file_name`, `logo_file_size`, `logo_content_type`,

`logo_updated_at`, `updated_at`, `created_at`) values ('2012-12-07 16.31.42.png', '36952',

'image/png', '2014-03-16 14:59:56', '2014-03-16 14:59:56', '2014-03-16 14:59:56')

好像 Laravel 绕过了第一条信息!

任何帮助将不胜感激。

【问题讨论】:

  • 创建带有徽标的公司的行覆盖了上面加载的 $company 属性,因此当您保存公司时,它正在更新它,因为它在创建时已加载。
  • 通过注释掉该行,它仍在尝试查找不存在的 user_id 字段。 - SQLSTATE [42S22]:未找到列:1054 '字段列表'中的未知列'user_id'(SQL:插入companiescompany_nameaddress_1townpostcodephone_numberapproved, user_id, updated_at, created_at) 值(测试公司,测试地址,伦敦,CD5 GBT,07958684756, 0, 3, 2014-03-16 15:21:48, 2014-03- 16 15:21:48)).
  • 发布在用户模型中定义的公司关系。
  • 公共函数 company() { return $this->hasOne('Company'); }
  • 一切似乎都很好,尝试更改变量名“公司”,因为它可能会混淆 Laravel。

标签: mysql laravel laravel-4 sql-update sql-insert


【解决方案1】:

先创建公司,然后保存。它只会创建一行,然后您可以将其关联到用户。

$company = Company::create(['logo' => Input::file('logo')]); 
$company->approved = '0'; 
$company->save(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    相关资源
    最近更新 更多