为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 ORM 雄辩的拉拉维尔 6.2 中创建复合密钥

如何在 ORM 雄辩的拉拉维尔 6.2 中创建复合密钥

PHP
qq_笑_17 2022-09-17 15:57:17
我想在数据库中的两个表之间创建一个复合键。我已经找到了如何在迁移中创建它,但对于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']);});因此,我试图在模型中建立一种归属关系,但是当我尝试保存我的对象时,没有任何附加内容,并且我的数据库中没有 anny 行。所以我认为这是错误的方式。如果你有一个想法,请帮我^^。
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

根据拉拉维尔的说法,雄辩不支持复合主键。你可以在这里查看这个问题


如果您真的想这样做,那么您可以覆盖并设置您的密钥。setKeysForSaveQueryModel.php


默认情况下:


protected function setKeysForSaveQuery(Builder $query)

{

    $query->where($this->getKeyName(), '=', $this->getKeyForSaveQuery());


    return $query;

}

$this->getKeyName()将返回主键名称,并将返回键的值。$this->getKeyForSaveQuery()


这意味着雄辩总是只用1个字段进行过滤。


一旦你执行了一个动作(),它就会被调用,它的作用是在SQL中生成一个子句。saveUPDATE and DELETEWHERE


例如,将其放入使用复合主键的模型中:


   protected function setKeysForSaveQuery(Builder $query)

    {

        $keys = $this->getKeyName();

        if(!is_array($keys)){

            return parent::setKeysForSaveQuery($query);

        }


        foreach($keys as $keyName){

            $query->where($keyName, '=', $this->getKeyForSaveQuery($keyName));

        }


        return $query;

    }


    

    protected function getKeyForSaveQuery($keyName = null)

    {

        if(is_null($keyName)){

            $keyName = $this->getKeyName();

        }


        if (isset($this->original[$keyName])) {

            return $this->original[$keyName];

        }


        return $this->getAttribute($keyName);

    }

如果在 setKeysForSaveQuery() 定义中使用生成器参数类型,则还需要将以下内容添加到模型的顶部:


use Illuminate\Database\Eloquent\Builder;


查看完整回答
反对 回复 2022-09-17
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号