2009-04-03 27 views

Trả lời

5

đoán từ câu này trong cuốn hướng dẫn:

Một mô hình nói chung là một điểm truy cập cơ sở dữ liệu, và đặc biệt hơn, vào một bảng nào đó trong cơ sở dữ liệu. Theo mặc định, mỗi mô hình sử dụng bảng có tên là số nhiều của riêng nó, tức là mô hình 'Người dùng' sử dụng bảng 'người dùng'.

Tôi không nghĩ vậy, nhưng bạn có thể tạo mối quan hệ có thể đó là những gì bạn cần.

Check this

+0

Tôi không thể mở liên kết "Kiểm tra liên kết này". –

1

Nó không thể có nhiều bảng cùng lúc ..., nhưng bạn có thể thay đổi Model :: hữu useTable để chuyển đổi bảng của mô hình để một tên khác. Cung cấp cho nó một whirl và cho chúng tôi biết nếu nó hoạt động.

2

Về mặt kỹ thuật, dựa trên cách bạn đặt câu hỏi, không phải là tôi biết. Tuy nhiên, thông thường, tôi sẽ sử dụng các mối quan hệ với một cái gì đó mà có thể tương tự như những gì bạn đang theo dõi. Ví dụ, một người có thông tin địa chỉ có thể được giảm xuống trong bảng người một cách dễ dàng đủ, nhưng tôi thường thích kéo nó ra bởi vì các thực thể khác cũng có thể có địa chỉ (một doanh nghiệp, v.v.).

Ý tưởng tương tự nếu bạn muốn triển khai một số loại mô hình thừa kế giả trong DB của bạn. Ví dụ, tình nguyện viên là con người, nhưng cũng là nhà thầu, nhà cung cấp và nhân viên. Tất cả chia sẻ các thuộc tính nhất định mà bạn có thể muốn lưu trữ trong bảng người và các thuộc tính khác là duy nhất đối với loại người đó.

Trong mỗi trường hợp, bạn có hai mô hình nhưng chúng hoạt động liền mạch thông qua các liên kết của chúng.

Nếu đó là loại kịch bản bạn đang nghĩ đến thì cách tiếp cận tương tự có thể phù hợp với bạn mặc dù nó không phải về một mô hình có nhiều bảng.

1

Tôi đoán bạn muốn triển khai một số loại thừa kế trong cơ sở dữ liệu (yêu cầu tham gia dữ liệu được lưu trữ trong bảng cha khi truy xuất thông tin từ bảng con). Cách tiếp cận của tôi để giải quyết điều này là sử dụng afterFind gọi lại trong mô hình con. Tôi đã xác định lại gọi lại như sau:

function afterFind($results) { 
    foreach ($results as $key => $val) { 
       $fieldRetrieved=$this->query("SELECT *field* FROM *parent_table* WHERE id={$val['*ChildModelName*']['id']}"); 
       $results[$key]['*ChildModelName*']['*field*']=$fieldRetrieved[0]['*parent_table*']['*field*']; 
    } 
    return $results; 
} 

Bằng cách này, tôi đã bao gồm các trường/s từ bảng chính vào kết quả thu được từ bảng con. Trong trường hợp này, tôi đã giả định rằng cả hai bảng là chỉ mục với một trường được gọi là id và trường đó, trong bảng con, cũng là một khoá ngoài cho bảng cha (do đó tạo ra thừa kế giả).

4

Chắc chắn nó có thể, thuận tiện khi bạn có nhiều bảng giống nhau.

class SomeModel extends Model 
{ 
    var $useTable = false; 

    public function ReadData() 
    { 
     // select table 
     if($a == 1) 
      $this->setSource('tableName1'); 
     else if($a == 2) 
      $this->setSource('tableName2'); 
     // ... 
     else if($a == N) 
      $this->setSource('tableNameN'); 

     // now perform operations with selected table 
     return $this->find('all'); 
    } 
} 
+0

Bạn có thể 'tìm ('tất cả')' trong toàn bộ các bảng thay vì chỉ định nghĩa một 'nguồn' duy nhất? – Oliboy50

Các vấn đề liên quan