Laravel 删除数据 - SQLSTATE [42S22]:找不到列:1054 未知列

Posted

技术标签:

【中文标题】Laravel 删除数据 - SQLSTATE [42S22]:找不到列:1054 未知列【英文标题】:Laravel delete data - SQLSTATE[42S22]: Column not found: 1054 Unknown column 【发布时间】:2020-02-29 14:44:33 【问题描述】:

从数据库中删除数据时如何解决 laravel 中外键名称的问题。我更改了类文件中关系的名称,但仍然无法正常工作。我需要在哪里进行更改? "SQLSTATE[42S22]: 列未找到: 1054 'where 子句'中的未知列 'kontakt.id' (SQL: select * from kontakt where kontakt.id = 1 limit 1)"

class User extends Model

    public $table = "user";
    public function kontakt()

     return $this->hasMany('App\kontakt');
    



class kontakt extends Model

    public $table = "kontakt";
    public function user()

        return $this->belongsTo('App\User','id_user','id_kontakt');
    

Schema::create('user', function (Blueprint $table) 
            $table->bigIncrements('id_user');
            $table->string('imie_user');
            $table->string('nazwisko_user');
            $table->string('haslo_user');
            $table->string('email')->unique();

Schema::create('kontakt', function (Blueprint $table) 
            $table->bigIncrements('id_kontakt');
            $table->string('imie_kontakt');
            $table->string('nazwisko_kontakt');
            $table->string('opis_kontakt');
            $table->string('miasto_kontakt');
            $table->string('ulica_kontakt');
            $table->string('nr_bloku_kontakt');
            $table->string('nr_mieszkania_kontakt');
            $table->string('telefon_kontakt');
            $table->string('nr_konta_kontakt');
            $table->string('nip_kontakt');
            $table->unsignedBigInteger('id_user');
            $table->foreign('id_user')->references('id_user')->on('user');
        )


 public function deletekontakt($id_kontakt)

    $kontakt = kontakt::find($id_kontakt);
    $kontakt->delete();
    return redirect('kontakty');

【问题讨论】:

【参考方案1】:

Eloquent 还会假设每个表都有一个名为 id 的主键列。你可以定义一个$primaryKey 属性来覆盖这个约定。

在您的 kontakt 模型中定义主键:

class kontakt extends Model

    public $table = "kontakt";
    protected $primaryKey = 'id_kontakt';

    public function user()

        return $this->belongsTo('App\User','id_user','id_kontakt');
    

也在用户模型中。

protected $primaryKey = 'id_user';

对于删除,你也可以使用destroy()方法。

kontakt::destroy($id_kontakt);

【讨论】:

是的:) 你可以直接删除reocrd。

以上是关于Laravel 删除数据 - SQLSTATE [42S22]:找不到列:1054 未知列的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE[HY000] [1049] 未知数据库 'laravel'

Laravel:数据表的 SQLSTATE [23000] 错误

Laravel / MySQL 错误:SQLSTATE[HY000]:一般错误:1835 格式错误的通信数据包

MySQL + Laravel:SQLSTATE [HY000] [1045] 用户'so'@'localhost'的访问被拒绝,但连接数据正常并且配置缓存被清除

Laravel:SQLSTATE [HY000] [2002] 连接被拒绝

SQLSTATE [23000]:完整性约束违规:1048 laravel 5.7