Es gibt eine Tabelle in der Datenbank mit den folgenden anfänglichen Migrationen zu wissen:Ärger mit Eloquent tatsächlichen primären (Composite) Schlüssel
public function up()
{
Schema::create('products_markets', function (Blueprint $table) {
$table->increments('id');
$table->integer('product_id')->unsigned();
$table->foreign('product_id')->references('id')->on('products');
$table->integer('country_code_id')->unsigned();
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->useCurrent();
});
$sql = 'ALTER TABLE `products_markets` ADD UNIQUE `unique_index`(`product_id`, `country_code_id`)';
DB::connection()->getPdo()->exec($sql);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('products_markets');
}
Und alles war in Ordnung; aber sobald es war realized dass es keinen Sinn eine automatische Primärschlüssel id
eine neue Migration zu haben, machte gemacht wurde:
public function up()
{
Schema::table('products_markets', function (Blueprint $table) {
DB::unprepared("ALTER TABLE products_markets ADD INDEX country_code_id (country_code_id)");
DB::unprepared('ALTER TABLE products_markets MODIFY id INT NOT NULL');
DB::unprepared('ALTER TABLE products_markets DROP PRIMARY KEY');
DB::unprepared('ALTER TABLE products_markets DROP COLUMN id');
DB::unprepared('ALTER TABLE products_markets ADD PRIMARY KEY (country_code_id, product_id)');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('products_markets', function (Blueprint $table) {
DB::unprepared('DROP INDEX country_code_id ON products_markets');
DB::unprepared('ALTER TABLE products_markets DROP PRIMARY KEY');
$table->increments('id');
});
}
Während dieser Code auf unserem Server arbeitet und auf einigen lokal, Maschinen scheinen andere Maschinen Fehler während der Tests zu werfen:
Product :: test_scopeMarket_only_returns_products_for_user_country Illuminate \ Database \ QueryException: SQLSTATE [42S22]: Column nicht gefunden: 1054 Unknown column 'id' in 'WHERE-Klausel' (SQL: update
products_markets
country_code_id
= 121 gesetzt,updated_at
= 2016.08.29 17.05.21 woid
null ist)
Der Test in Frage Fehler auf der folgenden Zeile:
$products[0]->markets()->first()->update(['country_code_id' => 121]);
Wir haben Komponist dumpautoload, re-migrierende, Cache zu löschen; jedoch scheint nichts zu helfen. Hat dies mit DB::unprepared
zu ALTER
Tabellen zu tun?
Sie sollten alle Abfragen neu schreiben, wo id mit einem neuen Primärschlüssel verwendet wurde ('product_id',' country_code_id') –
Ich denke, ich sollte ausarbeiten, dass ID in keiner Abfrage verwendet wird. –
Es scheint, dass es irgendwo im Testcode verwendet wird. –