lolo
lolo

Reputation: 3

Laravel delete data - SQLSTATE[42S22]: Column not found: 1054 Unknown column

How to fix problem with forein keys names in laravel while deleting data from database. I changed names in relationships in class file but still does not work. Where do i need make changes? "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'kontakt.id' in 'where clause' (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');
}

Upvotes: 0

Views: 1333

Answers (1)

Yasin Patel
Yasin Patel

Reputation: 5731

Eloquent will also assume that each table has a primary key column named id. You may define a $primaryKey property to override this convention.

in your kontakt model define primary key:

class kontakt extends Model
{
    public $table = "kontakt";
    protected $primaryKey = 'id_kontakt';

    public function user(){

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

also in User model .

protected $primaryKey = 'id_user';

And for delete, you can also use destroy() method.

kontakt::destroy($id_kontakt);

Upvotes: 4

Related Questions