Trong ứng dụng tôi đang xây dựng, người dùng có thể xác định mối quan hệ giữa các bảng.Làm cách nào để thêm mối quan hệ vào thời gian chạy bằng DBIx :: Class và Catalyst?
Vì tôi chỉ xác định điều này khi chạy, tôi không thể chỉ định has_many hoặc thuộc về các mối quan hệ trong mô-đun lược đồ để khởi động.
Vì vậy, được cung cấp hai bảng; hệ thống và địa điểm, tôi muốn thêm mối quan hệ để tham gia các bản ghi giữa chúng.
tôi có một phần của giải pháp dưới đây:
$rs = $c->model('DB::system')->result_source;
$rs->add_relationship('locations','DB::place',{'foreign.fk0' => 'self.id'});
Vì vậy, các cột fk0
sẽ là bản đồ chính nước ngoài để chính vị trí chủ chốt id
.
Tôi biết phải đăng ký lại để cho phép truy cập vào mối quan hệ trong tương lai nhưng tôi không thể hiểu được.
Bạn có chắc chắn người dùng thực sự thay đổi giản đồ cơ sở dữ liệu không? Điều đó hoàn toàn tương đương với việc cho phép họ chỉnh sửa mã nguồn. Bạn không nhất thiết phải mô hình hóa "giao diện người dùng" của mình với DBIx :: Class. Bạn có thể muốn phát triển một số biểu diễn trung gian cung cấp các chức năng mà bạn muốn, và giữ cho mã của bạn và lược đồ cơ sở dữ liệu cố định. – jrockway
Ngoài ra còn có DBIx :: Class :: Schema :: Loader, nếu bạn đang theo dõi một cơ sở dữ liệu thay đổi bạn không kiểm soát, hoặc một cái gì đó như thế. Nhưng hãy nhớ, các thay đổi lược đồ cơ sở dữ liệu sẽ thay đổi hành vi của ứng dụng của bạn. Nếu mã của bạn là tĩnh và lược đồ cơ sở dữ liệu của bạn là động, thì gần như chắc chắn có điều gì đó sai. – jrockway
Tôi đang khám phá khả năng sử dụng lược đồ/từ điển dữ liệu của riêng mình được phủ lên cơ sở dữ liệu thực tế. Tôi có bảng 'cột' và bảng 'bảng'. Chúng được sử dụng để ánh xạ các tên và các cột thuộc tính người dùng đã chọn vào một vùng bảng chung chung bên dưới. Như vậy, người dùng có thể chọn thêm mối quan hệ giữa các bảng vào thời gian chạy. Tôi muốn truy cập mối quan hệ này qua DBIx. Tôi đang xây dựng giao diện trung gian để ẩn lược đồ chung và cần khả năng này. Cảm ơn, -Joe – Joe