如何在laravel 8中使用复合主键?

How to use composite primary key in laravel 8?

我没有使用迁移文件,因为我在数据库中有预先存在的表,我想知道如何强制 laravel 使用我的复合主 key.if 有任何方法可以覆盖. 复合主键为(Tel + number_str ) 这是我在模型中的功能:

public function saveData(){
  $response = new ResponseModel(); 
                //Primary key(Tel + number_str )
                $reponse->Tel = '0123456789';//---> the first key
                $reponse->number_str = '1'; //---> the second key
    
                $reponse->view = '0';  
                $reponse->channal = '0';
                $reponse->save();
}

当我执行时出现这个错误:

Yajra\Pdo\Oci8\Exceptions\Oci8Exception
Error Code : 904 
Error Message : ORA-00904: "ID": invalid identifier Position : 98 Statement : insert into "RESPONSE" ("TEL", "number_str", "view", "channal ") values (:p0, :p1, :p2, :p3) returning "ID" into :p4 Bindings : [0123456789,1,0,0,0]

Laravel 附带 Eloquent ORM,而 Eloquent 不支持组合键。如果您打算覆盖 Eloquent 方法以支持它们,则需要覆盖 很多 核心方法以保持一切正常工作。

现在,Eloquent 不是与数据库交互的唯一选择。您仍然可以使用查询生成器来执行您的操作。但当然没有 ORM 的好处。

DB::table('response')->insert([
    'tel' => '0123456789', 
    'number_str' => 1,
    'view' => 0,
    'channel' => 0,
]);

DB::table('response')
  ->where('tel', '0123456789')
  ->where('number_str', 1)
  ->get();

Laravel 8,接受以下格式

DB::table('response')
  ->where('tel' ,'=', '0123456789')
  ->where('number_str', '=' ,1)
  ->get();