Ho bisogno di creare una tabella con una chiave primaria composita. Ho esaminato più opzioni per risolvere il problema per creare un campo AUTO_INCREMENT insieme ad altri campi e trasformarle in una chiave primaria composta, ma alla fine ci sono riuscito in questo modo;Tabella semi di laravel con chiave primaria composita
class CreateSpecificationTable extends Migration {
public function up()
{
Schema::create('specification', function(Blueprint $table){
$table->increments('specificationID');
$table->integer('categoryID', false, true);
$table->string('name', 100);
$table->dateTime('created_at');
$table->dateTime('updated_at')->nullable()->default(null);
$table->dateTime('deleted_at')->nullable()->default(null);
$table->foreign('categoryID')->references('categoryID')->on('categories');
});
DB::unprepared('ALTER TABLE specification DROP PRIMARY KEY, ADD PRIMARY KEY(specificationID, categoryID, name)');
}
Il modello per questa tabella è piuttosto semplice:
class Specification extends Eloquent {
protected $table = 'specification';
protected $primaryKey = array('specificationID', 'categoryID', 'name');
}
E poi la seminatrice si presenta così:
class SpecificationSeeder extends Seeder {
public function run()
{
Specification::create(array(
'categoryID'=>1,
'name'=>'size',
));
Specification::create(array(
'categoryID'=>2,
'name'=>'resolution',
));
Specification::create(array(
'categoryID'=>1,
'naam'=>'connection',
));
}
}
Tuttavia, quando si esegue il comando php artisan db:seed
da CMD, ho ottenere il seguente errore:
[ErrorException]
PDO::lastInsertId() expects parameter 1 to be string, array given
La cosa strana è che ho già costruito molte altre tabelle in questa app, ma questa è la prima in cui lo protected $primaryKey
nel modello è costituito da un array con campi, anziché avere un'unica chiave primaria.
Inoltre, nonostante questo errore, il primo 'seed' viene aggiunto nel database, ma nessuno dopo.