【问题标题】:Change default primary key in Eloquent更改 Eloquent 中的默认主键
【发布时间】:2013-11-30 14:17:39
【问题描述】:

我可以更改 Eloquent 模型的主键吗?

我想设置主键,例如 admin_id 而不是 'id'?

我知道我可以更改模型的表名,例如

protected $table = "admin";

主键有类似的吗?

【问题讨论】:

    标签: laravel-4 eloquent


    【解决方案1】:

    是的

    class User extends Eloquent {
    
        protected $primaryKey = 'admin_id';
    
    }
    

    【讨论】:

    • 对于引用此问题的其他任何人,请使用其他答案之一。 $primarykey 应该是 $primaryKey(大写字母 K),否则将不起作用。
    • 如果我有多个字段作为主键怎么办?
    • @bagusflyer 你在开玩笑吧?一个数据库表中有多个主键?
    • @bagusflyer Eloquent 不支持复合键,但这里有一个很好的解决方法,您可以使用 $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
    • 仅供参考,在 Laravel 5.4 中,如果它与为您添加的模型名称相同,则不再需要设置自己的 PK(否则会出错)。
    【解决方案2】:

    如果您想使用复合键(字符串)

    您需要确保设置了 public $incrementing = false 否则 laravel 会将字段转换为整数,从而给出 0

    class User extends Model {
    
        protected $primaryKey = 'my_string_key';
        public $incrementing = false;
    
    }
    

    【讨论】:

    • 我将 primaryKey 作为文本字符串 col 进行了覆盖 - 集合中的值是正确的,但是当我将 col 引用为 $results->primary_key 时,它只会返回零,尽管集合/数组显示了正确的字符串 - 当我注意到 primaryKey 在 Object 中显示为 INT 和 Incrementable 时,我花了一段时间才找到它。必须设置 public $incrementing = false。
    【解决方案3】:
    class User extends Eloquent {
    
        protected $primarykey = 'admin_id';
    
    }
    

    但是

    class User extends Eloquent {
    
        protected $primaryKey = 'admin_id';
    
    }
    

    注意变量 $primaryKey 上的字母 K(大写)

    【讨论】:

      【解决方案4】:

      主键变量区分大小写,必须为$primaryKey 才能工作。

      例子:

      protected $primaryKey = 'your_primary_key_id';

      模型类中的示例:

      class User extends Eloquent {
      
          protected $primaryKey = 'your_primary_key_id';
      
      }
      

      【讨论】:

      • 我还需要将它添加到 $fillable 数组吗?
      【解决方案5】:
      class User extends Eloquent {
      
          protected $primaryKey = 'admin_id';
      
      }
      

      根据 Laravel 文档:


      Eloquent 还会假设每个表都有一个名为 id 的主键列。你可以定义一个$primaryKey 属性来覆盖这个约定。

      此外,Eloquent 假设主键是一个递增的整数值,这意味着默认情况下主键会自动转换为 int。如果您希望使用非递增或非数字主键,您必须将模型上的公共 $incrementing 属性设置为 false。

      【讨论】:

        【解决方案6】:

        要分配主键,您应该:

        class User extends Eloquent {
        
            protected $primaryKey = 'admin_id';
        
        }
        

        【讨论】:

          猜你喜欢
          • 2022-12-11
          • 2020-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多