Helpex - Trao đổi & giúp đỡ Đăng nhập
16

Tôi biết tôi luôn có thể đặt một khóa DB duy nhất bằng cách sử dụng lược đồ MYSQL tuy nhiên tôi chỉ tò mò liệu học thuyết tương tự của ORM có cho phép bạn đặt một cột là duy nhất trong mã không?

Ví dụ: làm thế nào tôi có thể tạo nó trong mã để tên người dùng là mã duy nhất tại thời điểm chạy?

CREATE TABLE IF NOT EXISTS `user` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `username` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
    `email` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
    `password` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
<?php

function insert_user($username,$email,$password) 
{
    $user = new User();
    $user->setUsername($username); //HOW CAN I MAKE THIS UNIQUE IN CODE?
    $user->setEmail($email);
    $user->setPassword($password);

    try {
        //save to database
        $this->em->persist($user);
        $this->em->flush();
    }
    catch(Exception $err) {
        die($err->getMessage());
        return false;
    }

    return true;
}
16 hữu ích 0 bình luận 20k xem chia sẻ
24

Tôi cho rằng đây là những gì bạn muốn?

<?php
/**
 * @Entity
 * @Table(name="ecommerce_products",uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "email"})})
 */
class ECommerceProduct
{
}

http://www.doctrine-project.org/docs/orm/2.0/en/reference/annotations-reference.html#annref-uniqueconstraint

Vì tôi không có mã của bạn nên tôi không thể cung cấp cho bạn một ví dụ thực tế.

24 hữu ích 3 bình luận chia sẻ
72

Chỉ cung cấp một giải pháp thay thế đơn giản hơn một chút.

Nếu đó là một cột duy nhất, bạn có thể chỉ cần thêm một cột duy nhất vào định nghĩa cột:

class User
{
   /**
    * @Column(name="username", length=300, unique=true)
    */
   protected $username;
}

Tài liệu về điều này: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/annotations-reference.html#annref_column

Nếu bạn cần một chỉ mục duy nhất trên nhiều cột, bạn vẫn cần sử dụng phương pháp Andreas đã cung cấp.

lưu ý: Tôi không chắc phiên bản này có sẵn. Có thể điều này vẫn chưa có vào năm 2011.

72 hữu ích 0 bình luận chia sẻ
2

Bạn phải đặt các ràng buộc uniq trong khai báo @Table

@Hạn chế duy nhất

Chú thích được sử dụng bên trong chú thích @Table ở cấp lớp thực thể. Nó cho phép gợi ý SchemaTool để tạo ra một ràng buộc duy nhất của cơ sở dữ liệu trên các cột bảng được chỉ định. Nó chỉ có ý nghĩa trong ngữ cảnh tạo lược đồ SchemaTool.

Thuộc tính bắt buộc : name : Tên của Chỉ mục, cột : Mảng cột.

<?php
/**
 * @Entity
 * @Table(name="user",uniqueConstraints={@UniqueConstraint(name="username_uniq", columns={"username"})})
 */
class User
{
   /**
    * @Column(name="username", length=300)
    */
   protected $username;
}

nguồn: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/annotations-reference.html#annref-uniqueconstraint

2 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ php doctrine doctrine-orm , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading