亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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 關注
  • 93 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號