Header ads

Header ads

Doctrine hỗ trợ khả năng nạp dữ liệu bằng cách sử dụng cấu trúc YAML đơn giản. Nó giúp bạn dễ dàng tạo dữ liệu cho các bảng và liên kết khóa ngoài giữa chúng.
Ví dụ trong chương này sử dụng schema User và Phonenumber được xác định trong file config/doctrine/schema.yml.
User:
  columns:
    username: string(255)
    password: string(255)

Phonenumber:
  columns:
    user_id: integer
    phonenumber: string(25)
  relations:
    User:
      foreignAlias: Phonenumbers

Profile:
  columns:
    name: string(255)
    about: string(500)
    user_id: integer
  relations:
    User:
      foreignType: one
Trong sfDoctrinePlugin, các bản ghi liên kết với nhau thông qua tên quan hệ, cònsfPropelPlugin sử dụng tên khóa ngoài. Bạn cũng có thể tạo dữ liệu inline. Có nghĩa là, một khối YAML diễn tả một Doctrine_Record có thể chứa dữ liệu của cácDoctrine_Record con. Sau đâu chúng ta sẽ xem xét cả 2 cách original và inline.

Original

Tạo file data/fixtures/user.yml và thêm đoạn code YAML.
User:
  User_1:
    username: jwage
    password: changeme
  User_2:
    username: fabpot
    password: changeme
  User_3:
    username: dwhittle
    password: changeme
Chạy lệnh sau để tạo lại database.
$ ./symfony doctrine:build-all-reload
Bây giờ thực thi câu truy vấn DQL để lấy dữ liệu vừa nạp vào.
$ ./symfony doctrine:dql "FROM User u"
>> doctrine  executing dql query
DQL: FROM User u
found 3 results
-
  id: '1'
  username: jwage
  password: changeme
-
  id: '2'
  username: fabpot
  password: changeme
-
  id: '3'
  username: dwhittle
  password: changeme
Thiết lập giá trị ngày tháng trong Data Fixtures
sfYaml parser tự động chuyển giá trị ngày tháng sang unix timestamps trừ khi bạn đưa chúng vào trong dấu nháy đơn để parser coi đó là kiểu string. Nếu bạn không sử dụng dấu nháy đơn với các cột có kiểu dữ liệu date hoặc timestamp, Doctrine validation sẽ fail do dữ liệu pass phải là kiểu unix timestamp.
Dưới đây là ví dụ cách thiết lập giá trị cho cột created_at của model User.
User:
  User_1:
    username: jwage
    password: changeme
    created_at: '2008-12-17 00:01:00'

Liên kết các quan hệ

Tạo file data/fixtures/phonenumber.yml và thêm dữ liệu.
Phonenumber:
  Phonenumber_1:
    phonenumber: 6155139185
    User: User_1
  Phonenumber_2:
    phonenumber: 1234567890
    User: User_2
  Phonenumber_3:
    phonenumber: 0987654321
    User: User_3
Tạo lại database.
$ ./symfony doctrine:build-all-reload
Bây giờ lấy dữ liệu với câu truy vấn thực hiện việc join User và Phonenumber.
$ ./symfony doctrine:dql "FROM User u, u.Phonenumbers p"
>> doctrine  executing dql query
DQL: FROM User u, u.Phonenumbers p
found 3 results
-
  id: '1'
  username: jwage
  password: changeme
  Phonenumbers:
    -
      id: '1'
      phonenumber: 6155139185
      user_id: '1'
-
  id: '2'
  username: fabpot
  password: changeme
  Phonenumbers:
    -
      id: '2'
      phonenumber: 1234567890
      user_id: '2'
-
  id: '3'
  username: dwhittle
  password: changeme
  Phonenumbers:
    -
      id: '3'
      phonenumber: 0987654321
      user_id: '3'

Quan hệ nhiều-nhiều

Sử dụng file YAML schema config/doctrine/schema.yml sau.
BlogPost:
  columns:
    title: string(255)
    body: clob
  relations:
    Tags:
      class: Tag
      refClass: BlogPostTag
      foreignAlias: BlogPosts

BlogPostTag:
  columns:
    blog_post_id:
      type: integer
      primary: true
    tag_id:
      type: integer
      primary: true
  relations:
    BlogPost:
      foreignAlias: BlogPostTags
    Tag:
      foreignAlias: BlogPostTags

Tag:
  columns:
    name: string(255)
Thêm dữ liệu vào file data/fixtures/data.yml
BlogPost:
  BlogPost_1:
    title: Test Blog Post
    body: This is the body of the test blog post
    Tags: [test, php, doctrine, orm]

Tag:
  test:
    name: test
  php:
    name: php
  doctrine:
    name: doctrine
  orm:
    name: orm
Tạo lại database.
$ ./symfony doctrine:build-all-reload
Bây giờ thực hiện câu truy vấn DQL để lấy tất cả các bản ghi BlogPost và Tags liên quan
$ ./symfony doctrine:dql "FROM BlogPost p, p.Tags"
>> doctrine  executing dql query
DQL: FROM BlogPost p, p.Tags
found 1 results
-
  id: '1'
  title: 'Test Blog Post'
  body: 'This is the body of the test blog post'
  Tags:
    -
      id: '1'
      name: test
    -
      id: '2'
      name: php
    -
      id: '3'
      name: doctrine
    -
      id: '4'
      name: orm

Inline

Doctrine hỗ trợ khả năng mô tả dữ liệu quan hệ inline như dưới đây.
User:
  User_1:
    username: jwage
    password: changeme
    Phonenumbers:
      Phonenumber_1:
        6155139185

BlogPost:
  BlogPost_1:
    title: Test Blog Post
    body: This is the body of the test blog post
    Tags:
      test:
        name: test
      php:
        name: php
      doctrine:
        name: doctrine
      orm:
        name: orm
Cấu trúc trên giúp giảm độ dài và sự phức tạp của data fixtures.

About Học viện đào tạo trực tuyến

Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
«
Next
Bài đăng Mới hơn
»
Previous
Bài đăng Cũ hơn