我想在数据库中的两个表之间创建一个复合键。我已经找到了如何在迁移中创建它,但对于Eloquente ORM,我什么也没找到。
这是我的迁移:
Schema::create('passages', function (Blueprint $table) {
$table->unsignedBigInteger('id_contract');
$table->integer('month');
$table->integer('year');
$table->text('object');
$table->integer('nbPassage');
$table->decimal('priceExclTax');
$table->timestamps();
$table->foreign('id_contract')->references('id')->on('contracts');
$table->primary(['id_contract','mois','annee']);
});
所以我试着在模型中建立一个属于关系,但是当我试着保存我的对象时,没有任何附加,我的数据库中没有任何行。所以我觉得这条路不对。
如果你有什么想法,请帮助我。
2条答案
按热度按时间n6lpvg4x1#
根据laravel,Eloquent不支持复合主键。您可以在laravel github repository here上检查此问题
如果你真的想这样做,那么你可以覆盖
Model.php
的setKeysForSaveQuery
并设置你的密钥。默认情况下:
$this->getKeyName()
将返回主键名称,$this->getKeyForSaveQuery()
将返回键的值。这意味着Eloquent始终只过滤1个字段。
这将在执行
save
操作(UPDATE and DELETE
)时被调用,它所做的是在SQL中生成WHERE
子句。for例如,将此放入使用复合主键的模型中:
如果在setKeysForSaveQuery()定义中使用Builder参数类型,则还需要将以下内容添加到模型的顶部:
jtjikinw2#
我知道这是一个老职位,但这里是我如何处理它使用本地范围查询
1-在
Model
中:2-要检索模型,请将
"Model"
替换为您的Model name
: